我正在使用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
我的第二次尝试是创建一个服务(种类为“ PublicKeyResolver”)以请求Google的网址并根据“孩子”声明值提取正确的公钥:
mp.jwt.verify.publickey.location=http://localhost:8080/api/certs/publicKey
该策略失败,因为对publicKey的请求中未包含“授权” http标头。
有没有一种方法可以集成Quarkus和Firebase身份验证?
答案 0 :(得分:2)
有一种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 Key(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