android - 使用 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()
我已经使用了上面的代码,但它没有工作。任何人都知道如何传递私钥来生成令牌?
解决方案
第一件事是你是否在你的代码中意外遗漏了一个点,所以放那个,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()
推荐阅读
- java - 我可以让 UndoManager 考虑 DocumentFilter 吗?
- r - 在R中的字符串中添加0
- java - textview.getPaint() 出现错误“android.view.InflateException: Binary XML file line #21”“错误膨胀类片段”
- r - 如何使用 group_by 连接列并汇总 dplyr 函数
- python - 在 zip(a,b) 中创建带有 a 和 b 列的垂直化 txt 文件
- reactjs - 如何在本机反应中删除导航标题填充和边距?
- testing - Testcafe 不与 Macbook pro 中的浏览器交互
- python - 如何生成范围内的所有数字?在蟒蛇
- python - 如何修复由 Pycharm 中的 Tensorflow 引起的 cudart64_110.dll 错误?
- c++ - 我可以采取什么步骤来修复“Unknown type name 'Node'”的错误?