2.4. OpenID Connect および SmallRye JWT 認証メカニズムの選択
次の情報を参考にして、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 をサポートする | いいえ | はい |