Exchange Social Token

Mutation · exchangeSocialToken

exchangeSocialToken(input: ExchangeSocialTokenInput!): AuthPayload!

Ứng dụng mobile đăng nhập với Google bằng SDK, lấy ID token cấp cho server client ID và gửi vào mutation này. API dùng thư viện Google để kiểm tra chữ ký, aud, iss và hạn dùng. Khi tạo hoặc liên kết tài khoản, API yêu cầu email đã xác minh từ token. Client không gửi email hoặc user ID để API tin theo.

Gửi qua HTTP POST /graphql, không cần access token. Mutation dùng chung giới hạn 20 lần/phút theo IP với các mutation xác thực khác.

Input

TrườngKiểuQuy tắc
providerSocialProviderName!GOOGLE đang hoạt động; APPLE dành cho tích hợp sau này.
googleIdTokenStringBắt buộc khi provider = GOOGLE, tối đa 8192 ký tự. Không gửi trường Apple cùng lúc.
appleIdentityTokenStringDành cho Apple; hiện chưa xử lý.
appleAuthorizationCodeStringDành cho Apple; hiện chưa xử lý.

APPLE trả OAUTH_NOT_CONFIGURED cho đến khi server triển khai xác minh Apple. Google thiếu token hoặc trộn các trường khác provider trả OAUTH_FAILED. Thiếu cấu hình Google cũng trả OAUTH_NOT_CONFIGURED.

Output

Trả AuthPayload! gồm accessToken, refreshToken và user { id username displayName email avatarUrl }, cùng định dạng với login. Refresh token dùng qua refreshToken. Quy tắc liên kết tài khoản bằng email đã xác minh giống loginWithOAuth.

Ví dụ

mutation ExchangeSocialToken($input: ExchangeSocialTokenInput!) {
  exchangeSocialToken(input: $input) {
    accessToken
    refreshToken
    user { id username displayName email avatarUrl }
  }
}
{
  "input": {
    "provider": "GOOGLE",
    "googleIdToken": "example.google.id.token"
  }
}
{
  "data": {
    "exchangeSocialToken": {
      "accessToken": "example.access.token",
      "refreshToken": "example-refresh-token",
      "user": {
        "id": "user_123",
        "username": "lan_nguyen",
        "displayName": "Lan Nguyễn",
        "email": "[email protected]",
        "avatarUrl": null
      }
    }
  }
}

ID token sai chữ ký, sai audience, hết hạn hoặc lỗi lấy khóa công khai trả OAUTH_FAILED. Email chưa xác minh trả OAUTH_EMAIL_UNVERIFIED; tài khoản đã có Google identity khác trả OAUTH_ACCOUNT_EXISTS.

Chữ ký operation được tạo từ GraphQL schema.