Проверка подлинности Quarkus и Firebase - PullRequest
3 голосов
/ 07 мая 2020

Я разрабатываю новую службу REST с использованием Quarkus (1.3.2.Final) и пытаюсь интегрировать аутентификацию Firebase с Smallrye-Jwt, но это не удалось.

Моя первая попытка заключалась в том, чтобы указать открытый ключ .location на URL-адрес Google, и это не удалось, потому что есть два ключа и правильный 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 ") для запроса URL-адреса Google и извлечения правильного ключа publi c на основе значения заявки kid:

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

Эта стратегия не удалась, потому что http-заголовок« Авторизация »не включен в запрос для publicKey.

Есть ли способ интегрировать Quarkus и Firebase Authentication?

1 Ответ

2 голосов
/ 13 мая 2020

Есть способ интеграции Quarkus-Firebase. Согласно документации Quarkus mp.jwt.verify.publickey.location - это расположение Publi c Key. Кроме того, также определены поддерживаемые форматы ключей publi c (https://quarkus.io/guides/security-jwt#supported -publi c -key-sizes ):

Publi c Ключи могут быть отформатирован в любом из следующих форматов, указанных в порядке приоритета:

  • Publi c Стандарты шифрования ключей # 8 (PKCS # 8) PEM
  • JSON Веб-ключ ( JWK)
  • JSON Набор веб-ключей (JWKS)
  • JSON Веб-ключ (JWK) в кодировке Base64 URL-адрес
  • JSON Набор веб-ключей (JWKS) Base64 Кодированный URL-адрес

Таким образом, вы должны стремиться указать URL-адрес, содержащий ключи Publi c в формате JWKS (поскольку Smallrye-Jwt не может принять набор PEM PKCS # 8 ). "URL-адрес Google", который вы пытаетесь использовать, не соответствует набору JWK, совместимому с rfc7517.

Чтобы он работал, вы должны использовать этот URL-адрес Google JWKS, который соответствует rfc7517:

mp.jwt.verify.publickey.location = https://www.googleapis.com/service_accounts/v1/jwk/securetoken@system.gserviceaccount.com

...