具有自定义令牌的Firebase身份验证错误

时间:2020-04-24 14:03:41

标签: flutter firebase-authentication

我正在尝试使用 KakaoTalk 凭据在 firebase 中对用户进行身份验证。为此,我从KakaoTalk获得了accesstoken。然后尝试使用该令牌对用户进行身份验证。这是我的代码:

      String token = await kakaoService.getAccessToken();
      await firebaseAuth.signInWithCustomToken(
        token: token,
      );

这样获得令牌:nmAzFpOF9XrijP-ZoFpQbVluGZ4lLDbZxOCXIAo9c-sAAAFxrID6xA

但是出现此错误:

自定义令牌格式不正确。请检查文档。 [无效的断言格式。需要3个点分隔的段。 ]

这是怎么了?我想念什么吗?

2 个答案:

答案 0 :(得分:2)

似乎kakaoService.getAccessToken()返回的令牌对于Firebase身份验证不是有效的自定义令牌。实际上,给出错误消息后,它似乎根本不是JWT。

用于Firebase身份验证的自定义令牌必须具有特定格式,该格式在creating custom tokens中进行了说明。通常,您将需要遵循以下过程来获取Firebase身份验证的有效令牌:

  1. 将用户登录到身份提供商(在您的情况下为KakaoTalk)。
  2. 从提供者处解码令牌,以获取有关用户的经过验证的信息。
  3. 使用Firebase身份验证管理SDK为用户创建自定义令牌。
  4. 使用该令牌在客户端上登录Firebase。

第2步和第3步必须在受信任的环境中进行,例如开发计算机,您控制的服务器或Cloud Functions。

答案 1 :(得分:2)

查看有关自定义令牌使用的Firebase文档:https://firebase.google.com/docs/auth/admin/create-custom-tokens#create_custom_tokens_using_a_third-party_jwt_library

Firebase需要成功解码客户端提交的身份验证令牌,然后使用其声明来验证对Firebase资源的访问。因此,Firebase要求根据其文档中阐明的规则对自定义标记进行格式化。 (它们描述了一个非常典型的JSON Web令牌。)

您从 KakaoTalk 获取的访问令牌不遵循Firebase的令牌规则,因此Firebase不知道如何处理它。我建议您重新访问KakaoTalk文档,看看它是否可以生成标准的RS256 JWT令牌,Firebase 可以使用它。