首页 > 解决方案 > 使用 JWT 创建 Firebase 自定义身份验证令牌

问题描述

为了创建 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 = "-----开始私钥-----... -----结束私钥-----";

我在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()

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

标签: androidfirebasefirebase-authenticationjwt

解决方案


第一件事是你是否在你的代码中意外遗漏了一个点,所以放那个,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()

推荐阅读