使用JWT创建Firebase自定义身份验证令牌

时间:2019-06-11 09:47:39

标签: android firebase firebase-authentication jwt

为创建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()

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

1 个答案:

答案 0 :(得分:0)

第一件事是您是否意外遗漏了代码中的点,因此signWith()的参数不正确,即第一个参数是key,第二个参数是签名算法。试试这个:

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