4

我正在使用 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 的 url 并根据“kid”声明值提取正确的公钥:

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

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

有没有办法集成 Quarkus 和 Firebase 身份验证?

4

1 回答 1

3

Quarkus-Firebase 集成有一种方法。根据 Quarkus 文档 mp.jwt.verify.publickey.location 是公钥的位置。此外,还定义了支持的公钥格式(https://quarkus.io/guides/security-jwt#supported-public-key-formats):

公钥可以采用以下任何格式进行格式化,按优先顺序指定:

  • 公钥加密标准 #8 (PKCS#8) PEM
  • JSON 网络密钥 (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

于 2020-05-13T18:27:08.743 回答