2013-12-20

SalesforceとOpenAMでSSOやってみる。

最近SSOが熱いのでやってみた。

Salesforce Identityとか出てるけど関係ない!OSS最高!!

ということで、http://codezine.jp/article/detail/6321を参考にやってみました。

全体的な流れは

  1. OpenAMインストール
  2. Salesforce設定
  3. 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を利用しているからだと思われます。

こんな感じで指定します。

SAML シングルサインオン設定 Salesforce Developer Edition_02

黒塗りしてあるところは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)と突き合わせて認証するイメージ。

ここまで設定できれば、

  1. 私のドメインのURLにアクセス
  2. OpenAMのログイン画面に遷移
  3. 汎用IDを設定したOpenAMユーザでログイン
  4. 自動的にSalesforceの統合IDに紐づくユーザでログインされる
  5. SSO!!
というフローで、SSOを試せます。

この状態で、Salesforceのログアウトをすると、OpenAM側でもちゃんと自動的にログアウトされました。めでたしめでたし。

このエントリーをはてなブックマークに追加