2.3. OIDC によるアプリケーションの保護
JBoss EAP のネイティブ OpenID Connect (OIDC) クライアントを使用し、外部の OpenID プロバイダーを使用してアプリケーションを保護します。OIDC は、JBoss EAP などのクライアントが OpenID プロバイダーによって実行される認証に基づいてユーザーのアイデンティティーを検証できるようにするアイデンティティーレイヤーです。たとえば、Red Hat build of Keycloak を OpenID プロバイダーとして使用して、JBoss EAP アプリケーションを保護できます。
OIDC を使用してアプリケーションを保護するには、次の手順に従います。
2.3.1. JBoss EAP の OpenID Connect によるアプリケーションの保護
OpenID プロバイダーを使用してアプリケーションを保護する場合、セキュリティードメインリソースをローカルで設定する必要はありません。elytron-oidc-client
サブシステムは、OpenID プロバイダー (OP) に接続するための JBoss EAP のネイティブ OpenID Connect (OIDC) クライアントを提供します。JBoss EAP は、OpenID プロバイダーの設定に基づいて、アプリケーションの仮想セキュリティードメインを自動的に作成します。elytron-oidc-client
サブシステムは、Relying Party (RP) として機能します。
JBoss EAP のネイティブ OIDC クライアントは、RP が開始するログアウトをサポートしません。
OIDC クライアントは Red Hat build of Keycloak で使用することを推奨します。JSON Web トークン (JWT) であるアクセストークンを使用するように設定でき、RS256、RS384、RS512、ES256、ES384、または ES512 署名アルゴリズムを使用するように設定できる場合は、他の OpenID プロバイダーを使用できます。
OIDC の使用を有効にするには、elytron-oidc-client
サブシステムまたはアプリケーション自体を設定できます。JBoss EAP は、次のように OIDC 認証をアクティブにします。
-
アプリケーションを JBoss EAP にデプロイすると、
elytron-oidc-client
サブシステムがデプロイメントをスキャンして、OIDC 認証メカニズムが必要かどうかを検出します。 -
サブシステムが
elytron-oidc-client
サブシステムまたはアプリケーションデプロイメント記述子のいずれかでデプロイメントの OIDC 設定を検出した場合、JBoss EAP はアプリケーションの OIDC 認証メカニズムを有効にします。 -
サブシステムが両方の場所で OIDC 設定を検出した場合、
elytron-oidc-client
サブシステムsecure-deployment
属性の設定が、アプリケーションデプロイメント記述子の設定よりも優先されます。
デプロイメント設定
デプロイメント記述子を使用して OIDC でアプリケーションを保護するには、アプリケーションのデプロイメント設定を次のように更新します。
-
アプリケーションデプロイメント記述子
web.xml
ファイルでauth-method
プロパティーをOIDC
に設定します。
デプロイメント記述子の更新例
<login-config> <auth-method>OIDC</auth-method> </login-config>
OIDC 設定情報を含む
oidc.json
というファイルをWEB-INF
ディレクトリーに作成します。oidc.json
コンテンツの例{ "client-id" : "customer-portal", 1 "provider-url" : "http://localhost:8180/realms/demo", 2 "ssl-required" : "external", 3 "credentials" : { "secret" : "234234-234234-234234" 4 } }
サブシステムの設定
次の方法で elytron-oidc-client
サブシステムを設定することで、OIDC を使用してアプリケーションを保護できます。
- アプリケーションごとに同じ OpenID プロバイダーを使用する場合は、複数のデプロイメントに対して単一の設定を作成します。
- アプリケーションごとに異なる OpenID プロバイダーを使用する場合は、デプロイメントごとに異なる設定を作成します。
単一デプロイメントの XML 設定の例:
<subsystem xmlns="urn:wildfly:elytron-oidc-client:1.0"> <secure-deployment name="DEPLOYMENT_RUNTIME_NAME.war"> 1 <client-id>customer-portal</client-id> 2 <provider-url>http://localhost:8180/realms/demo</provider-url> 3 <ssl-required>external</ssl-required> 4 <credential name="secret" secret="0aa31d98-e0aa-404c-b6e0-e771dba1e798" /> 5 </secure-deployment </subsystem>
同じ OpenID プロバイダーを使用して複数のアプリケーションを保護するには、次の例に示すように、provider
を個別に設定します。
<subsystem xmlns="urn:wildfly:elytron-oidc-client:1.0"> <provider name="${OpenID_provider_name}"> <provider-url>http://localhost:8080/realms/demo</provider-url> <ssl-required>external</ssl-required> </provider> <secure-deployment name="customer-portal.war"> 1 <provider>${OpenID_provider_name}</provider> <client-id>customer-portal</client-id> <credential name="secret" secret="0aa31d98-e0aa-404c-b6e0-e771dba1e798" /> </secure-deployment> <secure-deployment name="product-portal.war"> 2 <provider>${OpenID_provider_name}</provider> <client-id>product-portal</client-id> <credential name="secret" secret="0aa31d98-e0aa-404c-b6e0-e771dba1e798" /> </secure-deployment> </subsystem>
2.3.2. Red Hat build of Keycloak での OIDC クライアントの作成
Red Hat build of Keycloak で OpenID Connect (OIDC) クライアントを作成し、JBoss EAP で使用してアプリケーションを保護します。
以下の手順は、テスト目的で Red Hat build of Keycloak を使用して JBoss EAP にデプロイしたアプリケーションの保護を開始するために必要な最小限の手順を示しています。詳細な設定については、Red Hat build of Keycloak サーバー管理ガイドの OpenID Connect クライアントの管理 を参照してください。
前提条件
Red Hat build of Keycloak でレルムを作成し、ユーザーを定義している。
詳細は、JBoss EAP でのレルムとユーザーの作成 を参照してください。
手順
- Red Hat build of Keycloak 管理コンソールに移動します。
クライアントを作成します。
- Clients をクリックし、Create client をクリックします。
-
Client type が
OpenID Connect
に設定されていることを確認します。 -
クライアント ID を入力します。たとえば、
jbeap-oidc
です。 - Next をクリックします。
- Capability Config タブで、Authentication Flow が Standard flow および Direct access grants に設定されていることを確認します。
- Next をクリックします。
-
Login settings タブで、Valid redirect URIs の値を入力します。認証成功後のページのリダイレクト先 URL を入力します (例:
http://localhost:8080/simple-webapp-example/secured/*
)。 - Save をクリックします。
アダプターの設定を表示します。
- Action をクリックし、Download adapter config をクリックします。
Keycloak OIDC JSON
を Format Option として選択して、接続パラメーターを確認します。{ "realm": "example_realm", "auth-server-url": "http://localhost:8180/", "ssl-required": "external", "resource": "jbeap-oidc", "public-client": true, "confidential-port": 0 }
Red Hat build of Keycloak をアイデンティティプロバイダーとして使用するように JBoss EAP アプリケーションを設定する場合は、パラメーターを次のように使用します。
"provider-url" : "http://localhost:8180/realms/example_realm", "ssl-required": "external", "client-id": "jbeap-oidc", "public-client": true, "confidential-port": 0
2.3.3. OpenID Connect を使用した Web アプリケーションの保護
アプリケーションを保護するには、そのデプロイメント設定を更新するか、elytron-oidc-client
サブシステムを設定します。
Web アプリケーションの作成 の手順で作成したアプリケーションを使用する場合、Principal の値は OpenID プロバイダーの ID トークンから取得されます。デフォルトでは、Principal はトークンからの "sub" クレームの値です。“email”、“preferred_username”、“name”、“given_name”、“family_name”、または “nickname” クレームの値をプリンシパルとして使用することもできます。次のいずれかの場所で、ID トークンのどのクレーム値をプリンシパルとして使用するかを指定します。
-
elytron-oidc-client
サブシステム属性principal-attribute
。 -
The oidc.json file
。
OIDC を使用するようにアプリケーションを設定するには、次の 2 つの方法があります。
elytron-oidc-client
サブシステムを設定する方法アプリケーションのデプロイメントに設定を追加しない場合は、この方法を使用します。
デプロイメント設定を更新する方法
サーバーに設定を追加せず、アプリケーションのデプロイメント内に設定を保持する場合は、この方法を使用します。
前提条件
- JBoss EAP にアプリケーションをデプロイしました。
手順
アプリケーションの
web.xml
を設定して、アプリケーションリソースを保護します。<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" metadata-complete="false"> <security-constraint> <web-resource-collection> <web-resource-name>secured</web-resource-name> <url-pattern>/secured</url-pattern> </web-resource-collection> <auth-constraint> <role-name>Admin</role-name> 1 </auth-constraint> </security-constraint> <security-role> <role-name>*</role-name> </security-role> </web-app>
- 1
Admin
ロールを持つユーザーのみがアプリケーションにアクセスできるようにします。任意のロールを持つユーザーがアプリケーションにアクセスできるようにするには、role-name
の値としてワイルドカード**
を使用します。
OpenID Connect を使用してアプリケーションを保護するには、デプロイメント設定を更新するか、
elytron-oidc-client
サブシステムを設定します。注記デプロイメント設定と
elytron-oidc-client
サブシステムの両方で OpenID Connect を設定する場合、elytron-oidc-client
サブシステムのsecure-deployment
属性の設定は、アプリケーションデプロイメント記述子の設定よりも優先されます。デプロイメント設定の更新:
認証方法として OIDC を指定するログイン設定を、アプリケーションの
web.xml
に追加します。<web-app> ... <login-config> <auth-method>OIDC</auth-method> 1 </login-config> ... </web-app>
- 1
- OIDC を使用してアプリケーションを保護します。
次のように、
WEB-INF
ディレクトリーにファイルoidc.json
を作成します。{ "provider-url" : "http://localhost:8180/realms/example_realm", "ssl-required": "external", "client-id": "jbeap-oidc", "public-client": true, "confidential-port": 0 }
elytron-oidc-client
サブシステムの設定:アプリケーションを保護するには、次の管理 CLI コマンドを使用します。
/subsystem=elytron-oidc-client/secure-deployment=simple-oidc-example.war/:add(client-id=jbeap-oidc,provider-url=http://localhost:8180/realms/example_realm,public-client=true,ssl-required=external)
アプリケーションのルートディレクトリーで、次のコマンドを使用してアプリケーションをコンパイルします。
$ mvn package
アプリケーションをデプロイします。
$ mvn wildfly:deploy
検証
ブラウザーで
http://localhost:8080/simple-webapp-example/secured
に移動します。Red Hat build of Keycloak のログインページにリダイレクトされます。
- Red Hat build of Keycloak で定義したユーザーの認証情報を使用してログインできます。
これで、アプリケーションは OIDC を使用して保護されました。