OAuth Authorization URL
Query · oauthAuthorizationUrl
oauthAuthorizationUrl(input: OAuthAuthorizationUrlInput!): String!
Tạo URL đưa trình duyệt đến trang cấp quyền của Google. Client tạo một state ngẫu nhiên và cặp PKCE codeVerifier/codeChallenge, giữ state và codeVerifier cho lần chuyển hướng trở lại, rồi gửi riêng codeChallenge trong query này. API thêm client ID, phạm vi quyền, redirect_uri cố định từ WEB_APP_URL (đường dẫn /login), và phương thức PKCE S256 vào URL.
Gửi qua HTTP POST /graphql. Không cần access token hoặc quyền thành viên workspace/conversation. Query này không có guard giới hạn số lần gọi của các mutation xác thực.
Input
| Đối số | Kiểu GraphQL | Bắt buộc | Ý nghĩa |
|---|---|---|---|
input | OAuthAuthorizationUrlInput! | Có | Provider, state và PKCE challenge; schema không khai báo mặc định. |
OAuthAuthorizationUrlInput
| Trường | Kiểu GraphQL | Bắt buộc | Quy tắc |
|---|---|---|---|
provider | OAuthProviderName! | Có | GOOGLE. Chỉ provider có trong oauthProviders mới có thể tạo URL. |
state | String! | Có | Từ 16 đến 128 ký tự thuộc A–Z, a–z, 0–9, -, ., _, ~. Client nên tạo ngẫu nhiên và so khớp với state trong URL chuyển hướng về; API không lưu hoặc kiểm tra nó. |
codeChallenge | String! | Có | Đúng 43 ký tự thuộc A–Z, a–z, 0–9, -, _. Client phải tính base64url(SHA-256(codeVerifier)); API kiểm tra định dạng, không tự kiểm tra quan hệ với verifier ở bước này. |
Mọi trường đều là !: không thể bỏ qua hoặc gửi null. Không gửi codeVerifier hoặc client secret vào query này.
Output
Trả về String!: URL cấp quyền của provider, không phải token phiên. URL chứa client_id, redirect_uri, response_type=code, scope, state, code_challenge và code_challenge_method=S256. Client điều hướng trình duyệt đến URL này. Sau khi provider chuyển hướng về /login với code và state, client phải so khớp state trước khi gọi loginWithOAuth.
Ví dụ
query OAuthAuthorizationUrl($input: OAuthAuthorizationUrlInput!) {
oauthAuthorizationUrl(input: $input)
}
Biến minh họa:
{
"input": {
"provider": "GOOGLE",
"state": "exampleRandomState1234567890",
"codeChallenge": "ZtNPunH49FD35FWYhT5Tv8I7vRKQJ8uxMaL0_9eHjNA"
}
}
Phản hồi minh họa (URL được rút gọn bằng cấu hình ví dụ):
{
"data": {
"oauthAuthorizationUrl": "https://accounts.google.com/o/oauth2/v2/auth?client_id=example-client-id&redirect_uri=https%3A%2F%2Fchat.example.test%2Flogin&response_type=code&scope=openid+email+profile&state=exampleRandomState1234567890&code_challenge=ZtNPunH49FD35FWYhT5Tv8I7vRKQJ8uxMaL0_9eHjNA&code_challenge_method=S256"
}
}
Provider chưa cấu hình trả OAUTH_NOT_CONFIGURED; state hoặc codeChallenge sai định dạng trả BAD_USER_INPUT. Một challenge đúng định dạng nhưng không khớp verifier sẽ khiến bước đổi mã đăng nhập thất bại.
Chữ ký operation được tạo từ GraphQL schema.