Ren*_*lva 4 jwt firebase-authentication quarkus smallrye
我正在使用 Quarkus (1.3.2.Final) 开发一个新的 REST 服务,并且尝试将 Firebase 身份验证与 Smallrye-Jwt 集成,但失败了。
我的第一次尝试是将 publickey.location 指向 Google 的 URL,但失败了,因为有两个密钥,并且检查签名的正确 publicKey 取决于 jwt“kid”标头值:
mp.jwt.verify.publickey.location=https://www.googleapis.com/robot/v1/metadata/x509/securetoken@system.gserviceaccount.com
mp.jwt.verify.issuer=https://securetoken.google.com/<projectId>
quarkus.smallrye-jwt.auth-mechanism=MP-JWT
quarkus.smallrye-jwt.enabled=true
Run Code Online (Sandbox Code Playgroud)
我的第二次尝试是创建一个服务(类似于“PublicKeyResolver”)来请求谷歌的网址并根据“kid”声明值提取正确的公钥:
mp.jwt.verify.publickey.location=http://localhost:8080/api/certs/publicKey
Run Code Online (Sandbox Code Playgroud)
该策略失败了,因为“授权”http 标头未包含在公钥请求中。
有没有办法集成 Quarkus 和 Firebase 身份验证?
小智 5
Quarkus-Firebase 集成有一种方法。根据 Quarkus 文档 mp.jwt.verify.publickey.location 是公钥的位置。此外,还定义了支持的公钥格式(https://quarkus.io/guides/security-jwt#supported-public-key-formats):
公钥可以采用以下任何格式,按优先顺序指定:
- 公钥加密标准 #8 (PKCS#8) PEM
- JSON Web 密钥 (JWK)
- JSON Web 密钥集 (JWKS)
- JSON Web 密钥 (JWK) Base64 URL 编码
- JSON Web 密钥集 (JWKS) Base64 URL 编码
因此,您的目标应该是指定包含格式为 JWKS 的公钥的 URL(因为 Smallrye-Jwt 无法接受一组 PKCS#8 PEM)。您尝试使用的“Google URL”不符合 rfc7517 兼容的 JWK 集。
为了使其正常工作,您应使用符合 rfc7517 的 Google JWKS URL:
mp.jwt.verify.publickey.location= https://www.googleapis.com/service_accounts/v1/jwk/securetoken@system.gserviceaccount.com
| 归档时间: |
|
| 查看次数: |
1957 次 |
| 最近记录: |