2013年6月15日土曜日

[AD FS]Salesforce との SSO(SP-Initiated SSO)

そう言えば何度も AD FS2.0 を使って Salesforce.com へのシングルサインオン設定はやって来ていても IdP-Initiated SSO (先に IdP / AD FS2.0 側で SAML トークンの発行を受けてから SP / Salesforce 側へアクセスする)ばかりで SP-Initiated SSO(Google Apps や Office365 の場合と同様に先に SP / Salesforce 側へアクセスすると IdP / AD FS2.0 側へリダイレクトされて認証、SAML トークンの発行を受ける)のパターンって試していなかったなぁ、、と思ったのでやってみました。

関連)IdP Initiated SSO の手順

 クラウド・サービスと社内システムとのID連携 最新トレンド:
  第5回 Salesforce CRM/Force.comとのアイデンティティ基盤連携を実現する
  - http://www.atmarkit.co.jp/ait/articles/1303/27/news081.html


■作業の流れ

 以下の流れで作業を行います。非常にシンプルです。

 1.[Salesforce側] 組織のドメイン名を取得/設定する
 2.[Salesforce側] シングルサインオンの設定を行う
 3.[AD FS2.0側] 証明書利用者信頼の設定を行う
 4.[Salesforce側] 対象ユーザの設定を行う
 5.[AD DS側] 対象ユーザの設定を行う
 ※今回は Developer Force のアカウントを使っています。

 では、順に解説します。

◆[Salesforce側] 組織のドメイン名を取得/設定する

 管理者で Salesforce にログオンし、[管理者設定]から[私のドメイン]を選択し、組織のドメインを設定します。ドメイン名は<任意の名前>.my.salesforce.com となりますので、任意の名前(重複不可)を設定します。
 しばらく(1日程度)待つとドメインの設定が完了する(管理者のメールアドレスへ通知がある)ので、これで設定は完了です。

 ドメインの設定が終わると以下のような状態になります。(テストが終わったらリリースすることになりますが、今回はテスト状態でも支障がないのでテスト状態のままで進めます)


◆[Salesforce側] シングルサインオンの設定を行う

 同じく管理者でログオンし、[管理者設定]から[セキュリティのコントロール]、[シングルサインオン設定]を選択します。
 そこで[SAMLを有効化]すると SAML 関連の設定が色々と出来ます。
 今回設定した内容は以下の通りです。

項目設定値
SAMLのバージョン2.0
発行者http://<ADFSサーバのFQDN>/adfs/services/trust
IDプロバイダの証明書AD FSのトークン署名用証明書をエクスポートしたもの(cerファイル)
IDプロバイダのログインURLhttps://<ADFSサーバのFQDN>/adfs/ls
SAMLのユーザID種別アサーションには、ユーザオブジェクトの統合 ID が含まれます
SAMLのユーザIDの場所ユーザ ID は、Subject ステートメントのNameIdentifier 要素にあります
エンティティIDhttps://<設定した組織のドメイン>.my.salesforce.com
サービスプロバイダの起動要求バインドHTTP リダイレクト


 設定を完了すると[メタデータのダウンロード]というボタンが出てくるのでクリックしてメタデータ(XMLファイル)をダウンロードします。


 これで Salesforce 側のシングルサインオン設定は完了です。


[AD FS2.0側] 証明書利用者信頼の設定を行う

 次は AD FS2.0 側の設定です。先ほどダウンロードした Salesforce 側のメタデータをインポートして設定を行います。ポイントはただ一つ、利用するセキュア ハッシュ アルゴリズムをデフォルトの SHA-256 から SHA-1 に変更する点だけです。

 まずは、普通通り AD FS2.0 の証明書利用者信頼の作成を行います。
 データソースの選択画面で先ほどのメタデータファイルを選択します。


 作成が終わったら、クレームのマッピングルールを作成します。
 今回は Active Directory の電子メールアドレス属性に入っている値を名前 ID (nameidentifier)として出力します。


 最後に、作成した証明書利用者申請のプロパティからセキュア ハッシュ アルゴリズムとして SHA-1 を設定します。


 これで AD FS2.0 側の設定も完了です。

◆[Salesforce側] 対象ユーザの設定を行う

 次にシングルサインオンするユーザの紐づけをします。
 今回は SAML トークンの中の subject に入っている nameidentifier を Salesforce 上のユーザの統合 ID と紐づけることでシングルサインオンを実現しますので、AD FS2.0 から出てくる nameidentifier に入っている値、つまり Active Directory の電子メールアドレス属性に入っている値を Salesforce 上のユーザの統合 ID に設定する必要があります。

 こんな感じで対象ユーザの属性を編集します。


 次は AD DS です。

◆[AD DS側] 対象ユーザの設定を行う

 同様に Active Directory 上のユーザの電子メールアドレス属性の値を設定します。


 以上で、シングルサインオンの設定および対象となるユーザの設定は完了です。
 早速、試してみます。

 まずは、先ほど設定した Salesforce の組織のドメインのアドレスへアクセスします。
 - https://<組織のドメイン名>.my.salesforce.com

 すると、AD FS2.0 のログイン画面にリダイレクトされ、認証を行います。(例では AD FS2.0 側の Windows 統合認証を無効化しているのでフォーム認証を行います)


 認証が無事に成功すると Salesforce にログオンされます。



いかがでしょうか?IdP Initiated SSO と設定は大きくは変わりませんが、組織のドメインを設定しておけば、Google Apps 等の SP Initiated SSO と同様のユーザ操作でシングルサインオンが実行されるので、組織内に他の SP Initiated SSO で利用しているサービスがある場合は混乱を避ける意味でもこのような設定の方があっている場合もあると思いますので、参考にしていただければと思います。

3 件のコメント:

atsukanrock さんのコメント...

古い記事なので突っ込むのは無粋な気もしますが、このブログは自分を含む IdM 迷子たちのオアシスなので。。

実際に試してみたところ、次の通り数カ所手順の変更が必要でした:

* Salesforce 側のマイドメイン設定で、https://developer.salesforce.com/blogs/developer-relations/2014/12/implementing-single-sign-on-mobile-applications-salesforce-identity.html にある通りに設定を変える。
* Salesforce 側の SSO 設定で、この記事中では HTTP リダイレクトを選ぶとあるが、HTTP ポストを選ぶ。

Naohiro Fujie さんのコメント...

ありがとうございます。
クラウドの良さって運用面など含め多々あるのですが、一方でインターフェイスがちょいちょい変わるのでついて行くのが大変ですよね。
過去の記事を見るとだいぶ変わってきてしまっているものも多いと思いますので、追々最新版で検証・記録していこうと思います。

atsukanrock さんのコメント...

ありがとうございます。いつも大変お世話になっています!