2.4. OpenID Connect、SmallRye JWT、OAuth2 認証メカニズムの選択
次の情報を参考にして、Quarkus アプリケーションを保護するための適切なトークン認証メカニズムを選択します。
認証メカニズムのユースケースリスト
-
quarkus-oidc
には、ベアラートークンの検証と、認可コードフローでのエンドユーザーの認証が可能な Keycloak などの OpenID Connect プロバイダーが必要です。いずれの場合も、quarkus-oidc
には指定された OpenID Connect プロバイダーへの接続が必要です。 -
ユーザー認証に認可コードフローが必要な場合、または複数のテナントをサポートする必要がある場合は、
quarkus-oidc
を使用します。quarkus-oidc
は、認可コードフローとベアラーアクセストークンの両方を使用してユーザー情報を要求することもできます。 -
ベアラートークンを検証する必要がある場合は、
quarkus-oidc
またはquarkus-smallrye-jwt
を使用します。 -
ベアラートークンが JSON Web トークン (JWT) 形式の場合は、前述のリストから任意のエクステンションを使用できます。
quarkus-oidc
とquarkus-smallrye-jwt
はどちらも、OpenID Connect プロバイダーがキーをローテーションするときにJsonWebKey
(JWK) セットの更新をサポートします。したがって、リモートトークンのイントロスペクションを回避する必要がある、またはそれがプロバイダーによってサポートされていない場合は、quarkus-oidc
またはquarkus-smallrye-jwt
を使用して JWT トークンを検証します。 -
JWT トークンをリモートでイントロスペクトするには、リモートイントロスペクションを使用することで、不透明トークンまたはバイナリートークンの検証に
quarkus-oidc
を使用できます。quarkus-smallrye-jwt
は、不透明トークンと JWT トークンの両方のリモートイントロスペクションをサポートしていません。代わりに、通常は OpenID Connect プロバイダーから取得されるローカルで利用可能なキーに依存しています。 -
quarkus-oidc
とquarkus-smallrye-jwt
は、エンドポイントコードへの JWT と不透明トークンの注入をサポートします。注入された JWT トークンは、ユーザーに関する詳細情報を提供します。すべてのエクステンションには、Principal
として注入されたトークンを含めることができます。 -
quarkus-smallrye-jwt
は、quarkus-oidc
よりも多くのキー形式をサポートしています。quarkus-oidc
は、JWK セットの一部である JWK 形式のキーのみを使用しますが、quarkus-smallrye-jwt
は PEM キーをサポートします。 -
quarkus-smallrye-jwt
は、ローカルで署名されたトークン、内部で署名および暗号化されたトークン、および暗号化されたトークンを処理します。一方で、quarkus-oidc
もこれらのトークンを検証できますが、不透明トークンとして扱い、リモートイントロスペクションを通じて検証します。
アーキテクチャーを考慮して、不透明トークン形式または JSON Web トークン (JWT) 形式のどちらを使用するかが決定されます。不透明トークンは JWT トークンよりもはるかに短くなる傾向がありますが、トークンに関連付けられた状態のほとんどをプロバイダーデータベースで維持する必要があります。実質的に、不透明トークンはデータベースポインターです。
JWT トークンは不透明トークンよりも大幅に長くなります。その場合もプロバイダーは、トークンクレームとしてトークン関連の状態を保存し、それに署名するか暗号化することで、トークン関連の状態の大部分をクライアントに委譲します。
必要な機能 | 認証メカニズム | |
---|---|---|
|
| |
ベアラー JWT 検証 | ローカル検証またはイントロスペクション | ローカル検証 |
ベアラー不透明トークン検証 | イントロスペクション | いいえ |
JWT トークン検証用に | はい | はい |
トークンを | はい | はい |
JWT を MP JWT として注入する | はい | はい |
認可コードフロー | はい | いいえ |
マルチテナンシー | はい | いいえ |
ユーザー情報のサポート | はい | いいえ |
PEM キー形式のサポート | いいえ | はい |
SecretKey のサポート | いいえ | JSON Web Key (JWK) 形式 |
内部署名および暗号化されたトークン、または暗号化されたトークン | イントロスペクション | ローカル検証 |
カスタムトークン検証 | いいえ | 注入された JWT パーサーを使用 |
Cookie としての JWT をサポートする | いいえ | はい |