Firebase REST API signInWithCustomToken和Apple SignIn Provider

上下文

  • 用Swift为iOS 13.2编写的iOS应用(不使用Firebase iOS SDK)
  • 应用通过REST调用使用Firebase实时数据库(因此需要来自 Firebase身份验证)

我正在尝试将iOS应用切换为使用Apple的“使用Apple登录”功能,以通过Firebase身份验证的“电子邮件/密码”登录提供程序替换简单的用户名/密码身份验证。

用户成功的“ Apple登录”将给我留下来自Apple的JWT令牌(身份令牌),例如这个(已解码和编辑的)令牌:

HEADER

{
  "kid": "ABCDPK1","alg": "RS256"
}

BODY

{
  "iss": "https://appleid.apple.com","aud": "XYZ.App","exp": 1574131940,"iat": 1574131340,"sub": "01234.1234561ecd054cd285d65cc7af261958.0123","c_hash": "ABCDe-csTpNdUa0Eri5wFw","email": "user@privaterelay.appleid.com","email_verified": "true","is_private_email": "true","auth_time": 1574131340
}

问题

当我使用Firebase Authentication REST API尝试将自定义令牌交换为ID并刷新令牌时,我收到以下消息(是的,我已经确保令牌在使用时没有过期) ):

{
  "error": {
    "code": 400,"message": "INVALID_CUSTOM_TOKEN","errors": [
      {
        "message": "INVALID_CUSTOM_TOKEN","domain": "global","reason": "invalid"
      }
    ]
  }
}

我希望Firebase身份验证中新的“ Apple”登录方法可以解决此问题,一旦配置,我就可以从Apple传入JWT令牌。我错过了一步吗?

谢谢!

hushikai123 回答:Firebase REST API signInWithCustomToken和Apple SignIn Provider

好吧,我猜我在发布了这篇文章后很快就找到了自己的问题的答案(当然...)。

我使用了错误的API端点。相反,我需要使用Sign-in with OAuth credentials端点:

https://identitytoolkit.googleapis.com/v1/accounts:signInWithIdp?key={{apiKey}}

to get back : 

{
  "federatedId": "apple.com/ABCDe.f0fc921ecd054cd285d65cc7af261958.1842","providerId": "apple.com","email": "user@privaterelay.appleid.com","emailVerified": true,"localId": "123456786RbgQgxhzfSpyIJGLPIw1","idToken": "eyJhbGciOiJSUzI1N...C2_3aQ-BjRiFQ","refreshToken": "AEu4IL1CY_PGF...6pN0DuQ","expiresIn": "3600","oauthIdToken": "eyJraWQiO...CJHHrxeg","rawUserInfo": "[JWT token info]","isNewUser": true,"kind": "identitytoolkit#VerifyAssertionResponse","pendingToken": "AMzJoSn...HkvLeaOmFjNlcw"
}
本文链接:https://www.f2er.com/3070175.html

大家都在问