Method: accounts.signInWithIdp

使用身份提供方 (IdP) 的凭据登录或注册用户。为此,您可以手动提供 IdP 凭据,也可以提供通过 accounts.createAuthUri 的授权请求获得的授权响应。如果登录成功,系统会为经过身份验证的用户颁发新的 Identity Platform ID 令牌和刷新令牌。

如果用户之前未使用同一账号登录 IdP,系统会创建一个新的 Identity Platform 用户账号。此外,启用“每个电子邮件地址一个账号”设置后,不应存在与要创建的新用户账号使用相同电子邮件地址的现有 Identity Platform 用户账号。

请求中必须包含 API 密钥,以便识别 Google Cloud 项目。

HTTP 请求

POST https://identitytoolkit.googleapis.com/v1/accounts:signInWithIdp

网址采用 gRPC 转码语法。

请求正文

请求正文中包含结构如下的数据:

JSON 表示法
{
  "requestUri": string,
  "postBody": string,
  "pendingIdToken": string,
  "returnRefreshToken": boolean,
  "sessionId": string,
  "delegatedProjectNumber": string,
  "idToken": string,
  "returnSecureToken": boolean,
  "returnIdpCredential": boolean,
  "autoCreate": boolean,
  "tenantId": string,
  "pendingToken": string
}
字段
requestUri

string

必需。IdP 将用户重定向回此网址。如果用户使用手动提供的 IdP 凭据登录,则可以将此值设置为 http://localhost

postBody

string

如果用户是使用通过之前的 accounts.createAuthUri 授权请求获得的授权响应进行登录,则此参数是 IdP 的 HTTP POST 回调正文(如果有)。

否则,如果用户使用手动提供的 IdP 凭据进行登录,则应使用经过网址编码的表单,其中包含凭据(例如 OAuth 2.0 IdP 的 ID 令牌或访问令牌)以及签发凭据的 IdP 的提供方 ID。

例如,如果用户使用 Google ID 令牌登录 Google 提供方,则应将此值设置为 id_token=[GOOGLE_ID_TOKEN]&providerId=google.com,其中 [GOOGLE_ID_TOKEN] 应替换为 Google ID 令牌。

如果用户使用 Facebook 身份验证令牌登录 Facebook 提供程序,则应将此值设置为 id_token=[FACEBOOK_AUTHENTICATION_TOKEN]&providerId=facebook. com&nonce= [NONCE],其中 [FACEBOOK_AUTHENTICATION_TOKEN] 应替换为 Facebook 身份验证令牌。验证令牌需要 Nonce。如果未提供 Nonce,请求将失败。

如果用户使用 Facebook 访问令牌登录 Facebook 提供程序,则应将此值设置为 access_token=[FACEBOOK_ACCESS_TOKEN]&providerId=facebook. com,其中 [FACEBOOK_ACCESS_TOKEN] 应替换为 Facebook 访问令牌。

如果用户使用 Twitter OAuth 1.0 凭据登录 Twitter 提供程序,则应将此值设置为 access_token=[TWITTER_ACCESS_TOKEN]&oauthTokenSecret= [TWITTER_TOKEN_SECRET]&providerId=twitter.com,其中 [TWITTER_ACCESS_TOKEN][TWITTER_TOKEN_SECRET] 应分别替换为 Twitter OAuth 访问令牌和 Twitter OAuth 令牌密钥。

pendingIdToken
(deprecated)

string

returnRefreshToken

boolean

是否从 IdP 返回 OAuth 刷新令牌(如果有)。

sessionId

string

上一次 accounts.createAuthUri 调用返回的会话 ID。系统会根据该会话 ID 验证此字段,以防范会话固定攻击。如果用户使用先前 accounts.createAuthUri 授权请求的授权响应进行登录,则必须提供此参数。

delegatedProjectNumber
(deprecated)

string (int64 format)

idToken

string

有效的 Identity Platform ID 令牌。如果通过验证,用户在 IdP 中的账号将与此 ID 令牌所代表的账号相关联。

returnSecureToken

boolean

应始终为 true。

returnIdpCredential

boolean

出现以下错误时是否从 IdP 返回 OAuth 凭据:FEDERATED_USER_ID_ALREADY_LINKEDEMAIL_EXISTS

autoCreate
(deprecated)

boolean

tenantId

string

用户登录的 Identity Platform 租户的 ID。如果未设置,用户将登录默认的 Identity Platform 项目。

pendingToken

string

上一个 accounts.signInWithIdp 响应中的不透明字符串。如果已设置,则可用于重复之前 accounts.signInWithIdp 操作中的登录操作。如果用户在之前的联合登录尝试过程中需要确认其账号信息,或者执行账号关联,则可能会出现此问题。

响应正文

accounts.signInWithIdp 的响应消息。

如果成功,响应正文将包含结构如下的数据:

JSON 表示法
{
  "federatedId": string,
  "providerId": string,
  "email": string,
  "emailVerified": boolean,
  "firstName": string,
  "fullName": string,
  "lastName": string,
  "nickName": string,
  "language": string,
  "timeZone": string,
  "photoUrl": string,
  "dateOfBirth": string,
  "inputEmail": string,
  "originalEmail": string,
  "localId": string,
  "emailRecycled": boolean,
  "displayName": string,
  "idToken": string,
  "context": string,
  "verifiedProvider": [
    string
  ],
  "needConfirmation": boolean,
  "oauthAccessToken": string,
  "oauthRefreshToken": string,
  "oauthExpireIn": integer,
  "oauthAuthorizationCode": string,
  "needEmail": boolean,
  "oauthTokenSecret": string,
  "refreshToken": string,
  "expiresIn": string,
  "oauthIdToken": string,
  "screenName": string,
  "rawUserInfo": string,
  "errorMessage": string,
  "isNewUser": boolean,
  "kind": string,
  "pendingToken": string,
  "tenantId": string,
  "mfaPendingCredential": string,
  "mfaInfo": [
    {
      object (MfaEnrollment)
    }
  ]
}
字段
federatedId

string

用户在 IdP 中的账号 ID。始终存在于响应中。

providerId

string

用户要登录的 IdP 的提供方 ID。始终存在于响应中。

email

string

用户在身份提供程序 (IdP) 中的账号的电子邮件地址。

emailVerified

boolean

用户账号的电子邮件地址是否已通过验证。

firstName

string

用户在身份提供程序中的账号的名字。

fullName

string

用户在 IdP 中的账号的全名。

lastName

string

用户在 IdP 中的账号的姓氏。

nickName

string

用户在 IdP 中的账号的昵称。

language

string

IdP 中用户账号的语言偏好设置。

timeZone

string

IdP 中用户账号的时区。

photoUrl

string

用户在身份提供程序中的个人资料照片的网址。

dateOfBirth

string

用户在 IdP 中的账号的出生日期。

inputEmail
(deprecated)

string

originalEmail

string

用户 Identity Platform 账号的主要(顶级)电子邮件地址(如果与 IdP 中的电子邮件地址不同)。仅当启用了“每个电子邮件地址一个账号”设置时才会显示。

localId

string

经过身份验证的 Identity Platform 用户的 ID。始终存在于响应中。

emailRecycled

boolean

是否存在使用相同电子邮件地址但与同一 IdP 中的其他账号相关联的现有 Identity Platform 用户账号。仅当启用了“每个电子邮件地址一个账号”设置且身份提供程序中的电子邮件地址已通过验证时才会出现。

displayName

string

用户在身份提供程序中的账号的显示名称。

idToken

string

经过身份验证的用户的 Identity Platform ID 令牌。

context

string

在 accounts.createAuthUri 中设置的不透明字符串,用于在身份验证请求和来自 IdP 的回调之间维护上下文信息。

verifiedProvider[]

string

用户可登录以解决 needConfirmation 错误的提供程序 ID 列表。仅当 needConfirmation 设置为 true 时才会存在。

needConfirmation

boolean

是否存在电子邮件地址与在 IdP 中登录的当前账号相同的现有 Identity Platform 用户账号,并且该账号的电子邮件地址未在 IdP 中经过验证。用户需要登录现有的 Identity Platform 账号,然后将 IdP 中的当前凭据与其相关联。仅当启用了“每个电子邮件地址一个账号”设置时才会显示。

oauthAccessToken

string

IdP 提供的 OAuth 访问令牌(如有)。

oauthRefreshToken

string

IdP 中的 OAuth 2.0 刷新令牌(如果有且 returnRefreshToken 设置为 true)。

oauthExpireIn

integer

IdP 中的 OAuth 访问令牌到期前剩余的秒数。

oauthAuthorizationCode

string

OAuth 2.0 授权代码(如有)。仅适用于 Google 提供商。

needEmail
(deprecated)

boolean

oauthTokenSecret

string

IdP 中的 OAuth 1.0 令牌密钥(如有)。仅适用于 Twitter 提供程序。

refreshToken

string

经过身份验证的用户的 Identity Platform 刷新令牌。

expiresIn

string (int64 format)

Identity Platform ID 令牌到期前的秒数。

oauthIdToken

string

IdP 提供的 OpenID Connect ID 令牌(如有)。

screenName

string

用户在 Twitter IdP 中的账号的屏幕名称,或用户在 GitHub IdP 中的账号的登录名称。

rawUserInfo

string

字符串化的 JSON 响应,包含与用户在 IdP 中的账号对应的所有数据。

errorMessage

string

如果将 returnIdpCredential 设置为 true 且遇到 FEDERATED_USER_ID_ALREADY_LINKEDEMAIL_EXISTS 错误,则返回的错误消息。此字段的值为 FEDERATED_USER_ID_ALREADY_LINKEDEMAIL_EXISTS

isNewUser

boolean

是否为经过身份验证的用户创建了新的 Identity Platform 账号。

kind
(deprecated)

string

pendingToken

string

一个不透明的字符串,可用作用户要登录的 IdP 中的凭据。此处获取的待处理令牌可在未来的 accounts.signInWithIdp 请求中设置,以便再次使用 IdP 登录同一用户。

tenantId

string

请求中的 tenantId 字段的值。

mfaPendingCredential

string

不透明字符串,用于证明用户已成功通过第一重身份验证。

mfaInfo[]

object (MfaEnrollment)

有关为账号启用了哪些多重身份验证提供方的相关信息。如果用户需要使用多重身份验证完成登录,则显示此按钮。

授权范围

需要以下 OAuth 范围之一:

  • https://www.googleapis.com/auth/identitytoolkit
  • https://www.googleapis.com/auth/cloud-platform

如需了解详情,请参阅 Authentication Overview