使用身份提供方 (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 |
必需。IdP 将用户重定向回此网址。如果用户使用手动提供的 IdP 凭据登录,则可以将此值设置为 |
postBody |
如果用户是使用通过之前的 accounts.createAuthUri 授权请求获得的授权响应进行登录,则此参数是 IdP 的 HTTP POST 回调正文(如果有)。 否则,如果用户使用手动提供的 IdP 凭据进行登录,则应使用经过网址编码的表单,其中包含凭据(例如 OAuth 2.0 IdP 的 ID 令牌或访问令牌)以及签发凭据的 IdP 的提供方 ID。 例如,如果用户使用 Google ID 令牌登录 Google 提供方,则应将此值设置为 id_token 如果用户使用 Facebook 身份验证令牌登录 Facebook 提供程序,则应将此值设置为 id_token 如果用户使用 Facebook 访问令牌登录 Facebook 提供程序,则应将此值设置为 access_token 如果用户使用 Twitter OAuth 1.0 凭据登录 Twitter 提供程序,则应将此值设置为 access_token |
pendingIdToken |
|
returnRefreshToken |
是否从 IdP 返回 OAuth 刷新令牌(如果有)。 |
sessionId |
上一次 accounts.createAuthUri 调用返回的会话 ID。系统会根据该会话 ID 验证此字段,以防范会话固定攻击。如果用户使用先前 accounts.createAuthUri 授权请求的授权响应进行登录,则必须提供此参数。 |
delegatedProjectNumber |
|
idToken |
有效的 Identity Platform ID 令牌。如果通过验证,用户在 IdP 中的账号将与此 ID 令牌所代表的账号相关联。 |
returnSecureToken |
应始终为 true。 |
returnIdpCredential |
出现以下错误时是否从 IdP 返回 OAuth 凭据: |
autoCreate |
|
tenantId |
用户登录的 Identity Platform 租户的 ID。如果未设置,用户将登录默认的 Identity Platform 项目。 |
pendingToken |
上一个 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 ( |
字段 | |
---|---|
federatedId |
用户在 IdP 中的账号 ID。始终存在于响应中。 |
providerId |
用户要登录的 IdP 的提供方 ID。始终存在于响应中。 |
email |
用户在身份提供程序 (IdP) 中的账号的电子邮件地址。 |
emailVerified |
用户账号的电子邮件地址是否已通过验证。 |
firstName |
用户在身份提供程序中的账号的名字。 |
fullName |
用户在 IdP 中的账号的全名。 |
lastName |
用户在 IdP 中的账号的姓氏。 |
nickName |
用户在 IdP 中的账号的昵称。 |
language |
IdP 中用户账号的语言偏好设置。 |
timeZone |
IdP 中用户账号的时区。 |
photoUrl |
用户在身份提供程序中的个人资料照片的网址。 |
dateOfBirth |
用户在 IdP 中的账号的出生日期。 |
inputEmail |
|
originalEmail |
用户 Identity Platform 账号的主要(顶级)电子邮件地址(如果与 IdP 中的电子邮件地址不同)。仅当启用了“每个电子邮件地址一个账号”设置时才会显示。 |
localId |
经过身份验证的 Identity Platform 用户的 ID。始终存在于响应中。 |
emailRecycled |
是否存在使用相同电子邮件地址但与同一 IdP 中的其他账号相关联的现有 Identity Platform 用户账号。仅当启用了“每个电子邮件地址一个账号”设置且身份提供程序中的电子邮件地址已通过验证时才会出现。 |
displayName |
用户在身份提供程序中的账号的显示名称。 |
idToken |
经过身份验证的用户的 Identity Platform ID 令牌。 |
context |
在 accounts.createAuthUri 中设置的不透明字符串,用于在身份验证请求和来自 IdP 的回调之间维护上下文信息。 |
verifiedProvider[] |
用户可登录以解决 |
needConfirmation |
是否存在电子邮件地址与在 IdP 中登录的当前账号相同的现有 Identity Platform 用户账号,并且该账号的电子邮件地址未在 IdP 中经过验证。用户需要登录现有的 Identity Platform 账号,然后将 IdP 中的当前凭据与其相关联。仅当启用了“每个电子邮件地址一个账号”设置时才会显示。 |
oauthAccessToken |
IdP 提供的 OAuth 访问令牌(如有)。 |
oauthRefreshToken |
IdP 中的 OAuth 2.0 刷新令牌(如果有且 |
oauthExpireIn |
IdP 中的 OAuth 访问令牌到期前剩余的秒数。 |
oauthAuthorizationCode |
OAuth 2.0 授权代码(如有)。仅适用于 Google 提供商。 |
needEmail |
|
oauthTokenSecret |
IdP 中的 OAuth 1.0 令牌密钥(如有)。仅适用于 Twitter 提供程序。 |
refreshToken |
经过身份验证的用户的 Identity Platform 刷新令牌。 |
expiresIn |
Identity Platform ID 令牌到期前的秒数。 |
oauthIdToken |
IdP 提供的 OpenID Connect ID 令牌(如有)。 |
screenName |
用户在 Twitter IdP 中的账号的屏幕名称,或用户在 GitHub IdP 中的账号的登录名称。 |
rawUserInfo |
字符串化的 JSON 响应,包含与用户在 IdP 中的账号对应的所有数据。 |
errorMessage |
如果将 |
isNewUser |
是否为经过身份验证的用户创建了新的 Identity Platform 账号。 |
kind |
|
pendingToken |
一个不透明的字符串,可用作用户要登录的 IdP 中的凭据。此处获取的待处理令牌可在未来的 accounts.signInWithIdp 请求中设置,以便再次使用 IdP 登录同一用户。 |
tenantId |
请求中的 |
mfaPendingCredential |
不透明字符串,用于证明用户已成功通过第一重身份验证。 |
mfaInfo[] |
有关为账号启用了哪些多重身份验证提供方的相关信息。如果用户需要使用多重身份验证完成登录,则显示此按钮。 |
授权范围
需要以下 OAuth 范围之一:
https://www.googleapis.com/auth/identitytoolkit
https://www.googleapis.com/auth/cloud-platform
如需了解详情,请参阅 Authentication Overview。