最近SSOが熱いのでやってみた。
Salesforce Identityとか出てるけど関係ない!OSS最高!!
ということで、http://codezine.jp/article/detail/6321を参考にやってみました。
全体的な流れは
- OpenAMインストール
- Salesforce設定
- OpenAM設定
今回はSP Initiated SSOを試してみます。
1. OpenAMインストール
参考URL:http://codezine.jp/article/detail/6319今回はEC2にテキトーなインスタンス立ち上げてOpenAMをインストールしてみました。Tomcatで動かすのでJavaのインストールも必要。
$ sudo yum install java-1.7.0-openjdk-devel.x86_64
$ sudo yum install tomcat6 tomcat6-webapps tomcat6-admin-webapps
$ wget http://download.forgerock.org/downloads/openam/OpenAM-12.0.0-SNAPSHOT_20131218.war
$ sudo mv OpenAM-12.0.0-SNAPSHOT_20131218.war /usr/share/tomcat6/webapps/openam.war
$ sudo service tomcat6 start
って感じでインストール&tomcat起動して、上記リンク先の通りに設定して、証明書を作成。
$ cd /usr/share/tomcat6/openam/openam/
$ keytool -export -keystore keystore.jks -alias test -file cert.cer -storepass changeit
2. Salesforce設定
私のドメインを設定・申請して、フロー通りに設定するだけ。ただし、IDプロバイダのログインURLが[OpenAMサーバのドメイン]:8080/openam/SSOPOST/metaAlias/idpじゃないとうまくいきませんでした。おそらく、リダイレクトの方法にHTTP-POSTを利用しているからだと思われます。
こんな感じで指定します。
黒塗りしてあるところはEC2のインスタンスのドメイン or SalesforceのMyドメインです。1で作成した証明書もここでアップロードします。
SAML設定作成後は、私のドメインでリダイレクトするように、[ドメイン管理>私のドメイン]で認証サービスを作成したSAML設定に切り替えます。
こうすると、私のドメインでログインURLを開くと自動的にOpenAMの画面に遷移することになります(遷移=HTTP-POST)。
また、ログイン連携対象Salesforceユーザの統合IDには任意のIDを指定してください。
3. OpenAMの設定
OpenAMのユーザを作成(汎用IDにSalesforceユーザの統合ID項目値を設定)して、トラストサークル、ホストアイデンティティプロバイダ(OpenAMサーバのこと)、リモートサービスプロバイダ(Salesforceのこと)を設定。リモートサービスプロバイダの設定で
「NameIDの書式」の「NameIDの書式リスト」から「urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified=」を削除し
「urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified=uid」を追加
って書いてありますが、実際は
NameIDの書式リストには「urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified」を入れたままで、マッピングのところに「urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified=uid」を入れるのが正解っぽいです。
SalesforceからのSAMLはunspecifiedタグ(?)の中に統合IDが入って、それをOpenAMのuid(汎用ID)と突き合わせて認証するイメージ。
ここまで設定できれば、
- 私のドメインのURLにアクセス
- OpenAMのログイン画面に遷移
- 汎用IDを設定したOpenAMユーザでログイン
- 自動的にSalesforceの統合IDに紐づくユーザでログインされる
- SSO!!
この状態で、Salesforceのログアウトをすると、OpenAM側でもちゃんと自動的にログアウトされました。めでたしめでたし。