OpenAMをOpenID Providerとして構成する
はじめに
本章ではOpenAMを利用したOpenID Providerの実装方法について記載いたします。
OpenAMはForgeRock社が開発を行なっている、アクセス管理を行なうオープンソースソフトウェアです。 シングルサインオン機能やアクセス制御機能を主に提供し、OAuth 2.0やOpenID Connectなどの各種プロトコルにも対応しているのが特徴です。
OpenAMの導入
OpenAMの導入は、OpenAMの普及促進や情報交換を目的とした団体であるOpenAMコンソーシアムが公開している技術Tips「OpenAM インストール手順」(以降、「情報ドキュメント」と呼ぶ)に従います。
事前準備
まず情報ドキュメントの「4. 事前準備」までを実行します。
以降、サーバーのホスト名、IP アドレスは情報ドキュメントと同じ値であるものとして説明します。
OpenAMは開発元のForgeRock社のWeb サイトより入手できます。サインインすることでEnterprise版の製品がダウンロードできます。今回は以下のバージョンを利用します。
- OpenAM-13.0.0.war
現在の最新版はOpenAM-13.5.2ですが、当バージョンは「Subscription Only」となっており、ダウンロードにはサブスクリプション契約が必要となります。
OpenAM-13.0.0は、Subscription Onlyでないバージョンですが、継続利用する場合にはサブスクリプション契約が必要となりますのでご注意ください。
また、OpenAMのバージョンによって設定コンソールの画面が変更されている場合があります。その場合は、当ドキュメントを参考に随時そのバージョンの操作画面に合わせて設定してください。
TomcatでのTLSの有効化
情報ドキュメントの「5. Apache Tomcat セットアップ」に従ってアプリケーションコンテナであるTomcatのセットアップを行ないます。
OpenAM-13.0.0では、Tomcat 8.5以上のバージョンを利用すると、正しく稼働しないバグがあったため、Tomcat 8.4以前のバージョンを利用しています。
OpenID Connectの実装ではTLSのサポートが必須ある。TomcatでのTLSの設定は公式ドキュメントなどを参考に設定を行ってください。
OpenAMのセットアップ
情報ドキュメントの「6. OpenAMセットアップ」に従ってOpenAMのセットアップを行ないます。
ただし、今回はTLSを有効にして設定を行なうため、ブラウザからアクセスするURLは https://sso1.example.com:8443/openam/ とします。
※ OpenAM-13.0.0では、Tomcatの80か443ポートに設定すると、OAuth同意画面が表示されないバグ があるため対処が必要です。
また、ここに示す手順では、TLSで用いる証明書が自己署名証明書となるため、ブラウザによってはアクセス時にアクセスがブロックされることがあります。検証のための利用であれば、今回の自己署名証明を受け入れるように設定することで利用が可能です。
OpenID Providerの設定
本節では、OpenAMをOpenID Providerとして動作させ、Relaying Partyを登録する設定の概要を説明します。
OpenAMではOAuth 2.0の管理画面に従い操作することで、OpenID Providerの設定はほぼ自動で完了します。しかしRelaying Partyを登録する際はスコープ、リダイレクトURI、レスポンスタイプを設定する必要があります。
OpenID Providerのセットアップ
OpenID ConnectはOAuth 2.0上で動くため、まずOAuth 2.0プロバイダとして設定する必要があります。
ブラウザでOpenAMの管理者ユーザーでログインすると、管理コンソール上にRealmsという画面が表示されます。レルムは設定と管理対象のユーザーをまとめて管理するための OpenAM上の仕組みで、初期時はTop Level Realmが用意されています。
Top Level Realmのアイコンを選択すると、Realm Overviewと呼ばれるレルム操作画面が表示されます。
「Configure OAuth Provider」のアイコンを選択すると「Configure OAuth Provider」の子画面が表示されます。
「Configure OpenID Connect」のアイコンを選択し「Configure OpenID Connect」の画面を表示させます。
今回は、デフォルト値のままで右上の [作成] を選択しています。ここで設定が成功すれば、成功を伝えるメッセージが表示されます。
設定に成功すると、OpenID Providerとして動作する状態になり https://sso1.example.com:8443/openam/oauth2/.well-known/openid-configuration へアクセスすることで、以下のように設定情報がJSON形式で確認できます。
{
"response_types_supported": [
"token id_token",
"code token",
"code token id_token",
"token",
"code id_token",
"code",
"id_token"
],
"registration_endpoint": "https://sso1.example.com:8443/openam/oauth2/connect/register",
"token_endpoint": "https://sso1.example.com:8443/openam/oauth2/access_token",
"end_session_endpoint": "https://sso1.example.com:8443/openam/oauth2/connect/endSession",
"version": "3.0",
"userinfo_endpoint": "https://sso1.example.com:8443/openam/oauth2/userinfo",
"subject_types_supported": [
"public"
],
"issuer": "https://sso1.example.com:8443/openam",
"jwks_uri": "https://sso1.example.com:8443/openam/oauth2/connect/jwk_uri",
"id_token_signing_alg_values_supported": [
"HS256",
"HS512",
"RS256",
"HS384"
],
"check_session_iframe": "https://sso1.example.com:8443/openam/oauth2/connect/checkSession",
"claims_supported": [
"phone",
"email",
"address",
"openid",
"profile"
],
"authorization_endpoint": "https://sso1.example.com:8443/openam/oauth2/authorize"
}
また、OpenID Providerの設定を変更したい場合は、再度Realm Overviewの画面まで戻って左側のメニュー内のServicesを選択すれば、設定済みのOAuth 2.0プロバイダが表示され、そこから設定画面へ移動できます。
以上でOpenID Providerとしての設定は完了です。続いて、このOpenID Providerを利用するRelying Partyを登録します。
Relaying Partyの登録
次にRelaying Partyの情報をOpenAMに登録する。
OpenID Providerでは Relying Partyからの認証リクエストに含まれるスコープ、レスポンスタイプ、クライアントID、リダイレクトURIなどを検証します。そのため、利用可能なパラメータを予めRelying Partyに登録しておく必要があります。
Relying PartyはOAuth 2.0のクライアントとして登録します。管理者でOpenAMにログインし、先程と同じレルムを選択します。ここではTop Level Realmを選択しています。
レルムを選択するとRealm Overview画面が表示されるので、左メニューのAgentsを選択します。
その後、[エージェント] タブ → [OAuth2.0 クライアント] タブの順に選択します。ここでエージェントのリストの [新規] ボタンを押して OAuth2.0 クライアントの作成画面に移動します。
作成する際にはクライアントのIDとパスワードの入力が必要である。これらはトークンエンドポイントでクライアントを認証する場合に用いられます。入力が完了したら右上の [作成] ボタンを押します。
作成が成功すると、エージェントのリストに今作成したエージェントが追加されているので、追加されたエージェントを選択します。
選択後、クライアントの設定画面で必要な設定を行ないます。
登録したOAuth 2.0クライアントをOpenID Connectに対応させるためにいくつかの設定を行なう必要があります。最低限設定が必要な項目は、スコープ、リダイレクトURI、レスポンスタイプの3つです。
OpenID Connectの場合、リクエスト時のスコープに “openid” が必ず指定されます。Relying Partyのデフォルト設定ではスコープが未設定となっているため、最低限スコープに “openid” を追加する必要があります。その他に必要なスコープ(profile など)があれば適宜追加します。
スコープを登録するには新しい値に登録したいスコープを入力し [追加] ボタンを押します。追加を押すと、[現在の値] リストに入力値が追加されます。
また、リダイレクトURIも初期設定では未設定となっているので設定が必要です。
レスポンスタイプはデフォルトで ”code” や “id_token” などが既に登録済みですが、不足がある場合は適宜追記します。
必要な設定項目の入力が終了したら設定画面右上の [保存] ボタンを押します。このボタンを押すまでは各入力値は設定に反映されません。
以上で、Relying Partyの登録が終了です。
OpenAMにおけるOpenID Connectのより詳しい設定ついては、ForgeRockのドキュメントが参考になります。