如何修复'自定义令牌格式不正确。当我检查令牌时,请检查文档和无效签名

时间:2019-04-01 17:46:30

标签: swift firebase firebase-authentication jwt

我收到一条错误消息:

  

自定义令牌格式不正确。请检查文档。

当我用消息

检查JWT中的令牌时出错
  

无效的签名。

我已经不知道令牌中的哪些支票有效。

请引导我以正确的方式解决问题。谢谢!

我按照此处描述的步骤操作:Firebase。 尝试为Firebase的方法 Auth.auth()。signIn(withCustomToken:)生成自定义令牌。使用框架SwiftyJWT

  1. 我在Online RSA Key Generator

  2. 上生成密钥
  3. 到期时间 晚于 发布时间 ,时间为3600秒。自UNIX时代以来,这些值以秒为单位

  4. 添加自定义字段,因为SwiftyJWT仅具有 jwtId ,但是我需要 uid 。我的 uid 长度在1-36个字符之间

  5. 使用RS256算法

下面添加一些代码:

  1. let bodyKey =“ -----开始使用RSA私有密钥----- \ n'some-generate-key''\ n——结束RSA私有密钥-----”

  2. var有效负载= JWTPayload()

有效载荷。 发行人 =“ firebaseserviceaccount@'my-project-id-firebaseApp'.iam.gserviceaccount.com”

有效载荷。 主题 =“ firebaseserviceaccount@'my-project-id-firebaseApp'.iam.gserviceaccount.com”

有效载荷。 issueAt = Int(Date()。timeIntervalSince1970)

有效载荷。 到期 = payload.issueAt! + 3600

有效载荷。 受众 =“ https://identitytoolkit.googleapis.com/google.identity.identitytoolkit.v1.IdentityToolkit

  1. 让someUID =“ dfsgdfg4546ysg45t67” 有效负载。 customFields = [“ uid”:EncodableValue(value:someUID)]

    让privateKey =尝试吗? RSAKey(base64String:bodyKey,keyType:.PRIVATE)

    guard let key = privateKey else {return“”}

  2. jwtWithKeyId = JWT(有效载荷:有效载荷,算法:.rs256(密钥))

JWT中进行检查并获得结果:

  1. 标题
    {
      "alg": "RS256",
      "typ": "JWT"
    }
  1. 有效载荷
    {

      "exp": 1554135867,


      "iat": 1554132267,

      "iss": "firebaseserviceaccount@'my-project-id-firebaseApp'.iam.gserviceaccount.com",

      "uid": "dfsgdfg4546ysg45t67",

      "sub": "firebaseserviceaccount@'my-project-id-firebaseApp'.iam.gserviceaccount.com",

      "aud": "https://identitytoolkit.googleapis.com/google.identity.identitytoolkit.v1.IdentityToolkit"

    }
  1. 验证签名

填写“ RSA PRIVATE KEY”和“ RSA PUBLIC KEY”字段。但是出现错误信息“ Invalid Signature”。

1 个答案:

答案 0 :(得分:0)

Firebase令牌无法通过SwiftyJWT创建。需要通过Firebase Admin Auth SDK创建Firebase自定义令牌。该链接显示了有关如何创建令牌服务器端的说明,然后将其传递给客户端进行验证。此功能可用于Node.js,Java,python,go和C#。