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 GraphQLBắt buộcÝ nghĩa
inputOAuthAuthorizationUrlInput!CóProvider, state và PKCE challenge; schema không khai báo mặc định.

OAuthAuthorizationUrlInput

TrườngKiểu GraphQLBắt buộcQuy tắc
providerOAuthProviderName!CóGOOGLE. Chỉ provider có trong oauthProviders mới có thể tạo URL.
stateString!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ó.
codeChallengeString!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.