本稿では、OpenID Connect/OAuth2.0のエンドポイントへのアクセスをポリシーに基づいて制御する機能について説明します。これはコンソーシアム版OpenAM 14に含まれることになった新規機能です。既にSAML2.0のケースについては、SAML2.0のエンドポイントをポリシーによって保護する話で説明しました。目的や機能はかなり重複しているため、ここではOpenID Connect/OAuth2.0に特徴的な部分について説明します。
認証の方式、強度の指定方法
SAML2.0と同様にOpenID Connect/OAuth2.0でもACR(認証コンテキスト・クラス・レファレンス)を使用して認証の方式や強度をリクエスト時に指定することが可能です。詳細については、この記事がお勧めです。この仕様は、OpenAMを含む多くの処理系で実装されてはいるのですが、あまり効果的に利用されては言えません。そこで、IdP/認可サーバ側に予め一定の条件(ポリシー)を設定しておき、その条件が満たされたときにのみトークンを発行するという新たな機能をコンソーシアム版 OpenAM 14 に追加しました。
ポリシーの設定単位
SAML2.0の場合は、IdPとSPのEntity IDのペアに対してポリシーを定義しましたが、OpenID Connect/OAuth2.0の場合は、クライアントに対して定義を行います。クライアント毎に細かく条件を指定し、その条件が満たされたときにのみトークンが発行されるようにすることが可能です。
設定方法
設定方法について説明します。
機能の有効化
本機能はディフォルトでは無効になっています。有効にするために以下の手順を行ってください。
- 管理コンソールを開き エージェント > OAuth2.0 クライアント に移動し、対象となるクライアント名(ここでは"testClient")をクリックします
- ページの末尾までスクロールし、「ポリシーに基づくエンドポイントの保護」を有効にします
表示されるページを下の方にスクロールします。
ポリシーの定義
次にポリシーの定義方法について説明します。リソースタイプ、ポリシーセット、ポリシーの順に登録していきます。
リソースタイプの登録
以下の項目を登録します
- 名前 : 任意の名前(ここでは"OAuth2Client"と指定)
- パターン : client_id=*
- アクション : IssueAssertion: 許可/拒否
(デフォルト値なのであとから変更可能です)
ポリシーセットの登録
以下の項目を設定します:
- Id:OAuthClientService
- 名前:任意の名前
- リソースタイプ: 上で登録したリソースタイプの名前(ここでは"OAuth2Client")
ポリシーの登録
以下の項目を設定します:
- 名前:任意の名前
- リソースタイプ:上で登録したリソースタイプの名前(ここでは"OAuth2Client")
- リソース:対象となるクライアントの
client_id
を設定
acr_valuesとの関係
arc_valuesの指定がある場合にはそれを無視することはありません。認証コンテキスト・クラスの条件が満たされた上でポリシーが満たされているかのチェックが行われます。