【问题标题】:Create Firebase custom auth token using JWT使用 JWT 创建 Firebase 自定义身份验证令牌
【发布时间】:2019-10-25 17:06:47
【问题描述】:

为了创建 firebase 自定义身份验证令牌,我使用的是第三方 JWT 库 (https://github.com/jwtk/jjwt)

在这个库中,有一个选项可以添加 firebase 自定义令牌声明,例如(alg、iss、sub、aud、iat 等)

所有 firebase 信息都可以在 https://firebase.google.com/docs/auth/admin/create-custom-tokens#create_custom_tokens_using_a_third-party_jwt_library 获得

private_key = "-----BEGIN PRIVATE KEY-----... -----END PRIVATE KEY-----";

我在 signWith 方法中传递了私钥,使用 base64 编码

 val encodeKey = Base64.encode(privateKey.toByteArray(), android.util.Base64.DEFAULT)

 val jwt = Jwts.builder().setIssuer("firebase-adminsdk-kywht@...")
                .setSubject("firebase-adminsdk-kywht@...")
                .setAudience("https://identitytoolkit.googleapis.com/google.identity.identitytoolkit.v1.IdentityToolkit")
                .setExpiration(calendar.time) //a java.util.Date
                .setIssuedAt(Date())
                .setId(UUID.randomUUID().toString())signWith(SignatureAlgorithm.RS512 ,encodeKey).compact()

我已经使用了上面的代码,但是没有用。 有人知道如何传递私钥来生成令牌吗?

【问题讨论】:

    标签: android firebase firebase-authentication jwt


    【解决方案1】:

    第一件事是你是否不小心错过了代码中的一个点,所以把它放好,signWith() 的参数不正确,即第一个参数是密钥,第二个是签名算法。试试这个:

    val encodeKey = Base64.encode(privateKey.toByteArray(), android.util.Base64.DEFAULT)
    
    val jwt = Jwts.builder().setIssuer("firebase-adminsdk-kywht@...")
                .setSubject("firebase-adminsdk-kywht@...")
                .setAudience("https://identitytoolkit.googleapis.com/google.identity.identitytoolkit.v1.IdentityToolkit")
                .setExpiration(calendar.time) //a java.util.Date
                .setIssuedAt(Date())
                .setId(UUID.randomUUID().toString())
                .signWith(encodeKey, SignatureAlgorithm.RS512) //changed here
                .compact()
    

    【讨论】:

    • Ujjwal Jung Thapa,为了安全起见,我在末尾加了一个点。正如您建议的那样,使用 signWith(encodeKey, SignatureAlgorithm.RS512)。但是第一个参数需要java.security.Key对象,encodeKey其实是字符串。
    • Ujjwal Jung Thapa,你知道如何将这个 private_key 转换成 java.security.Key 吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-06
    • 2023-03-12
    • 2020-08-23
    • 2019-07-04
    • 2017-07-03
    • 1970-01-01
    • 2017-12-19
    相关资源
    最近更新 更多