SAMLシングル・サインオン構成において、 IdP(Identity Provider)にのみ OpenAM を用い、 SP(Service Provider)にOpenAM以外(SalesforceやG-Suite、cybozu)を用いた例は、 インターネット上によく見かけます。
一方、SP に OpenAMを用いた例は、あまり見かけない為、 今回、主に SPや SP側WebAgentの設定について記載しています。
0.今回 構成のポイント
https://resources.us.safenetid.com/help/ForgeRock%20OpenAM/Index.htm
上記urでは、SP に OpenAM を用い、 Authentication Modules (SAML)や Authentication Chain を 設定し、 SP にあるログイン画面を表示しないようにしています。(下図)
当初、上記urlの設定に倣おうとしましたが、上手くSAML連携できなかった為、 今回は、Auth Moduleや Auth Chain を用いず、 主に SAMLトラストサークルと、ログイン画面URLの設定を行うことで IdPのログイン画面をdefault表示するようにしていますので、 SPのログイン画面もURLを直接指定することで表示できる状態にしています。
1. 事前準備
ここでは、SPやSP側WebAgentのサーバインスタンスの追加から、 ミドルウェアやOpenAMのインストールまでを簡単に記載します。
1.1. OpenAM SP - sp.end0tknr.com
1.1.1. サーバインスタンス
AWS EC2
t2.small、ディスク=50GB、OS=AmazonLinux1
hostname
$ sudo vi /etc/sysconfig/network HOSTNAME=sp1.end0tknr.com (ロードバランサ下での冗長構成を想定し、上記としてます)
/etc/hosts
$ sudo vi /etc/hosts $PRIVATE_IP sp1.end0tknr.com ( $PRIVATE_IPはAWSにより決定される任意のものです)
ALB(ELB)
ホスト名=sp.end0tknr.com TARGET= sp1.end0tknr の port:8080
1.1.2. Java
version 1.8.0を利用していますが、別のバージョンでも問題ないと思います。
$ sudo yum install java-1.8.0-openjdk-devel.x86_64 $ sudo alternatives --config java $ /usr/bin/java -version openjdk version "1.8.0_252"
1.1.3. tomcat
少々、古めのOpenAM 13を使用する為、tomcat7を使用しています
$ cd /opt $ sudo wget https://ftp.tsukuba.wide.ad.jp/software/apache/tomcat/tomcat-7/v7.0.105/bin/apache-tomcat-7.0.105.tar.gz $ sudo tar -xvf apache-tomcat-7.0.105.tar.gz $ sudo ln -s apache-tomcat-7.0.105 tomcat $ sudo useradd tomcat $ sudo chown -R tomcat:tomcat /opt/tomcat $ sudo chown -R tomcat:tomcat /opt/apache-tomcat-7.0.105 $ sudo mkdir /opt/sso ## openamの設定用dir $ sudo chown tomcat:tomcat /opt/sso $ sudo vi /etc/init.d/tomcat #!/bin/bash # description: Tomcat7 Start Stop Restart # processname: tomcat7 # chkconfig: 234 20 80 CATALINA_HOME=/opt/tomcat case $1 in start) sh $CATALINA_HOME/bin/startup.sh ;; stop) sh $CATALINA_HOME/bin/shutdown.sh ;; restart) sh $CATALINA_HOME/bin/shutdown.sh sh $CATALINA_HOME/bin/startup.sh ;; esac
1.1.4. OpenAM
OpenAM ver.12 を使用したかったのですが、 ForgeRock社のライセンス変更?により入手できない為、 OpenAM Community Edition ver.13 を使用しています。
$ sudo /etc/init.d/tomcat stop $ sudo su - # cd /opt/tomcat/webapps # wget https://github.com/OpenIdentityPlatform/OpenAM/releases/download/13.0.0/OpenAM-13.0.0.war # mv OpenAM-13.0.0.war sso.war # chown tomcat:tomcat sso.war $ sudo /etc/init.d/tomcat start https://sp.end0tknr.com/sso へブラウザでアクセス - 「設定オプション」画面にて「カスタム設定の新しい設定の作成」リンクをクリック - 「カスタム設定オプション 手順1:一般」にて 「amadmin」のpasswordを<ないしょ>に設定 - 「カスタム設定オプション 手順2:サーバ設定」にて サーバURL : https://sp.end0tknr.com:443 Cookieドメイン: .end0tknr.com ロケール : en_US 設定dir : /opt/sso - 「カスタム設定オプション 手順3:設定データストア設定」にて 設定データストア : OpenAM ポート : 50389 管理者ポート : 4444 JMXポート : 1689 暗号化鍵 : root4HEMS ルートサフィックス: dc=openam,dc=forgerock,dc=org - 「カスタム設定オプション 手順4:ユーザーデータストア設定」にて 「OpenAMのユーザデータストア」を選択 - 「カスタム設定オプション 手順5:サイト設定」に ロードバランサの背後に配備され「ない」として次へ ※「ロードバランサの背後に配備される」でも問題ないと思います。 - 「カスタム設定オプション 手順6:デフォルトのポリシーエージェントユーザー」にて パスワード : <ないしょ> 「設定の作成」をクリックし、しばらく経過すると「設定が完了しました」と 表示される為、「ログインに進む」をクリックでログインできれば、完了。
1.1.5.テスト用ユーザの作成
ブラウザでOpenAMにログインし、IdPにて、Top Level Realm -> Data Stores -> 「対象」順に画面遷移後、ユーザを追加して下さい。
1.2. OpenAM SP側WebAgent - sp-agt.end0tknr.com
1.2.1. サーバインスタンス
AWS EC2
t2.small、ディスク=50GB、OS=AmazonLinux1
hostname
$ sudo vi /etc/sysconfig/network HOSTNAME=sp-agt1.end0tknr.com (ロードバランサ下での冗長構成を想定し、上記としてます)
/etc/hosts
$ sudo vi /etc/hosts $PRIVATE_IP sp-agt1.end0tknr.com ( $PRIVATE_IPはAWSにより決定される任意のものです)
ALB(ELB)
ホスト名=sp-agt.end0tknr.com TARGET= sp-agt1.end0tknr の port:8080
1.2.2. apache httpd
$ sudo yum install httpd24 $ /usr/sbin/httpd -v Server version: Apache/2.4.43 (Amazon) $ sudo chkconfig --add httpd $ sudo chkconfig httpd on $ sudo chkconfig --list httpd httpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off $ sudo /etc/init.d/httpd start
1.2.3. WebAgent (Servie Provider側)
先程、installした Service Provider (OpenAM)へブラウザでログインし、 以下の設定を行って下さい。
エージェントプロファイルを作成。 Top Level Realm -> Agents -> Web で遷移した画面で、 エージェントの「新規」をクリックし、「新しいWeb」の画面にて以下を入力 名前 : idp_to_sp_by_saml パスワード : ないしょ 設定 : 集中 サーバー URL : https://sp.end0tknr.com:443/sso エージェント URL: https://sp-agt.end0tknr.com:443/ 同じ IdPにて、OpenAM上でAuthorization Policyを作成。 Top Level Realm -> Authorization -> Policy Setsへ移動。 iPlanetAMWebAgentServiceの右側のEdit(鉛筆)アイコンをクリック。 Add a New policyで新しいポリシーを作成する。 「New Policy」の画面にて以下を入力。 Name : idp_to_sp_by_saml Description : null Resources : *://*:*/* 更に「Subjects」タブへ移動し、TypeをAuthenticated Usersに変更。
1.2.4. WebAgent
※yum install httpd で adduser された apache を su - 可能にする(以下) # su - apache This account is currently not available. # vi /etc/passwd apache:x:48:48:Apache:/var/www:/bin/bash # CHANGE from /sbin/nologin $ sudo su - $ mkdir /etc/httpd/openam $ chown apache:apache /etc/httpd/openam ## 以下は、web agent の installerが httpd.conf を書き換える為に実施 $ chown -R apache:apache /etc/httpd/conf $ su - apache $ cd /etc/httpd/openam $ wget https://github.com/OpenIdentityPlatform/OpenAM-Web-Agents/releases/download/4.1.1/Apache_v24_Linux_64bit_4.1.1.zip $ unzip Apache_v24_Linux_64bit_4.1.1.zip $ echo "ないしょ" > web_agents_passwd $ cd /etc/httpd/openam/web_agents/apache24_agent/bin $ ./agentadmin --help $ ./agentadmin --i ## 「i」は、インストールを意味します Configuration file [/opt/apache/conf/httpd.conf]: /etc/httpd/conf/httpd.conf Existing OpenSSOAgentBootstrap.properties file: NULL OpenAM server URL: https://sp.end0tknr.com/sso Agent URL: https://sp-agt.end0tknr.com Agent Profile name: idp_to_sp_by_saml Agent realm/organization name: [/]: NULL The path and name of the password file: /etc/httpd/openam/web_agents_passwd $ sudo /etc/init.d/httpd stop $ sudo /etc/init.d/httpd start
2. SAML設定
ここからが、本題の SAML設定です
2.1. SAMLトラストサークル作成
OpenAM Service Provider へブラウザで amadminでログインし 「FEDERATION」→「連携タブ」→「新規」ボタンをクリックして下さい。 「トラストサークルの作成」画面にて「名前」【のみ】入力し、 「了解」をクリックすることで 【空】のトラストサークルを作成します。
▼
▼
2.2. SAMLトラストサークルへのエンティティ追加 (ServiceProvider)
「Top Level Realm」→「Create SAMLv2 Providers」→ 「Create Hosted Service Provider」で遷移後、 「このサーバー上に SAMLv2 サービスプロバイダを作成します」画面で、 以下に記載のように設定することで、 先程作成したトラストサークルへServiceProviderが追加されます。
▼
項目 | 内容 |
---|---|
このプロバイダのメタデータはありますか? | いいえ |
メタデータURL | https://sp.end0tknr.com:443/sso |
トラストサークル | 既存のトラストサークルに追加します |
既存のトラストサークル | ★先程作成したトラストサークル名を選択下さい |
IdPのデフォルト属性マッピングを使用しますか | はい |
2.3.SAMLトラストサークルへのエンティティ追加 (Identity Provider)
「Top Level Realm」→「Create SAMLv2 Providers」→ 「Register Remote Identity Provider」で遷移後、 「SAMLv2 リモートアイデンティティープロバイダを作成します」画面で、 以下に記載のように設定することで、 先程作成したトラストサークルへIdentity Providerが追加されます。
▼
項目 | 内容 |
---|---|
メタデータ ファイルはどこに存在しますか? | URL |
メタデータが配置されているURL | https://idp.end0tknr.com/sso/saml2/jsp/exportmetadata.jsp?realm=/ |
トラストサークル | 既存のトラストサークルに追加します |
既存のトラストサークル | ★先程作成したトラストサークル名を選択下さい |
2.4. SAMLトラストサークル作成と、エンティティ追加(IdP側)
先程までに行ったSP側と、ほぼ同様の手順で、IdP側(idp.end0tknr.com)へも SAMLトラストサークル作成と、エンティティ追加を行って下さい。 IdP側のトラストサークルに追加するServiceProviderエンティティのメタデータURLは、 例えば、次のものです。
https://sp.end0tknr.com/sso/saml2/jsp/exportmetadata.jsp?realm=/
2.5. SAMLエンティティ(ServiceProvider)の修正 表明処理における自動連携設定
ここでは、IdPとSP間での、ユーザID(uid)の連携を設定します。
まず、SAMLトラストサークル設定画面にあるエンティティプロバイダ(SP)のリンクから、 設定画面へ遷移して下さい。
次に「SP」の「表明処理」画面で以下のように設定し、完了です。
項目 | 内容 |
---|---|
自動連携 有効 | はい |
自動連携 属性 | uid |
2.6. WebAgent設定
SP側 WebAgentへのアクセスで、IdP側ログイン画面へリダイレクトする設定を行います。 まず、「Top Level Realm」→「Agents」で画面遷移して下さい。
「グローバル」タブにて以下の赤線のように設定を行って下さい。
項目 | 内容 |
---|---|
エージェント通知 URL | https://idp.end0tknr.com:443/UpdateAgentCacheServlet?shortcircuit=false |
エージェント通知 URI プレフィックス | https://idp.end0tknr.com:443/amagent |
CDSSO のエージェントルート URL | https://idp.end0tknr.com:443/ |
完全修飾ドメイン名 FQDN デフォルト | end0tknr.com |
「OpenAMサービス」タブタブにて以下の赤線のような設定を【戦闘に】追加して下さい。
項目 | 内容 |
---|---|
OpenAM ログイン URL | https://sp.end0tknr.com/sso/saml2/jsp/spSSOInit.jsp?metaAlias=/sp&idpEntityID=https://idp.end0tknr.com:443/sso |
OpenAM ログアウト URL | https://sp.end0tknr.com/sso/UI/Logout?realm=/ |
以上で、設定完了で、SP側WebAgentへブラウザでアクセスすると、IdPのログイン画面が表示され、 認証成功すると、SP側WebAgent の画面が表示されるかと思います。