最近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のインストールも必要。

って感じでインストール&tomcat起動して、上記リンク先の通りに設定して、証明書を作成。

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の書式リストには「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側でもちゃんと自動的にログアウトされました。めでたしめでたし。