Аутентификация Quarkus и Firebase
Я разрабатываю новую службу REST с использованием Quarkus (1.3.2.Final), и я пытаюсь интегрировать аутентификацию Firebase с Smallrye-Jwt, но это не удалось.
Моя первая попытка заключалась в том, чтобы указать publickey.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 и извлечения правильного открытого ключа на основе значения заявки "kid":
mp.jwt.verify.publickey.location=http://localhost:8080/api/certs/publicKey
Эта стратегия не удалась, потому что HTTP-заголовок "Авторизация" не включен в запрос для publicKey.
Есть ли способ интегрировать Quarkus и Firebase Authentication?
1 ответ
Есть способ интеграции Quarkus-Firebase. Согласно документации Quarkus mp.jwt.verify.publickey.location - это расположение открытого ключа. Кроме того, определены поддерживаемые форматы открытых ключей (https://quarkus.io/guides/security-jwt):
Открытые ключи могут быть отформатированы в любом из следующих форматов, указанных в порядке приоритета:
- Стандарты криптографии с открытым ключом #8 (PKCS#8) PEM
- Веб-ключ JSON (JWK)
- Набор веб-ключей JSON (JWKS)
- Веб-ключ JSON (JWK) в кодировке Base64 URL
- Набор веб-ключей JSON (JWKS) в кодировке Base64 URL
Таким образом, вы должны стремиться указать URL-адрес, содержащий открытые ключи в формате 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