Quarkus和Firebase身份验证

时间:2020-05-07 16:11:30

标签: firebase-authentication jwt 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

我的第二次尝试是创建一个服务(种类为“ PublicKeyResolver”)以请求Google的网址并根据“孩子”声明值提取正确的公钥:

mp.jwt.verify.publickey.location=http://localhost:8080/api/certs/publicKey

该策略失败,因为对publicKey的请求中未包含“授权” http标头。

有没有一种方法可以集成Quarkus和Firebase身份验证?

1 个答案:

答案 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