【ADFS】Salesforce CRMにおけるシングルサインオン

Salesforce CRMのシングルサインオンは私の周りで最近話題に上がることが多く、
典型的なWIFアプリケーションやGoogle Appsとは異なるID連携の仕組みを実装していることもあり、
少し試してみようと思いました。

■Salesforce CRM
http://www.salesforce.com/jp/
Enterprise以上のエディションで利用できるそうです。

■今回のキャスト
・Salesforce CRMの契約
・ADFS2.0サーバー
・Active Directory

■実装ステップ – 事前準備
オンプレミスの環境にActive DirectoryとADFS2.0をインストールしておきます。
Salesforce CRMのために、特別なADFS2.0のインストールをする必要はありません。
(証明書も自己署名証明書で十分です)

■実装ステップ – Salesforce CRMの設定
Salesforce CRMに管理者アカウントでログインし、[設定]-[管理者設定]-[シングルサインオン設定]の順に
アクセスすると、シングルサインオン設定項目が登場します。
(SAMLアサーションを使用すると書いてありますね)

image

SAMLを有効化にチェックをつけて、編集をクリックし、以下のように設定します。
image

主な設定項目を紹介すると、以下のとおりです。
・発行者:ADFSサーバーのフェデレーションサービスの識別子(大文字・小文字を区別することに注意)
・IDプロバイダの証明書:ADFSサーバーのトークン署名証明書を登録
・SAMLのユーザIDの場所:[ユーザーIDは、SubjectステートメントのNameIdentifier要素にあります]を選択

ここまでの設定が完了し、保存をクリックすると、以下の画面が登場します。
image

このとき、[メタデータのダウンロード]をクリックしておきます。

■実装ステップ – ADFS2.0の設定
ADFS2.0の管理ツールを開き、証明書利用者信頼を新規作成します。
証明書利用者信頼の新規作成ウィザードから、設定が必要な項目をステップバイステップで見てみましょう。

・データソースの選択
Salesforce CRMの管理画面からダウンロードしたメタデータを指定します。
CRM06

・表示名
Salesforce CRMにログインするときの表示名となります。
CRM07

・完了
上2つの設定を行ったら、後は完了まで[次へ]で進みます。
この画面でチェックをつけておくと、続いて要求規則の編集画面に進みます。
CRM11

・要求規則
変換要求規則で、[LDAP属性を要求として変換]をここでは選択し、
・属性ストア:Active Directory
・LDAP属性:E-Mail-Address
・出力方向の要求の種類:名前ID
で規則を作成します。すると、Active Directoryに登録されたメールアドレスが
Salesforce CRMのユーザーアカウントになります。
CRM14

■テスト
ここまでできたら、いよいよログインです。
Salesforce CRMのシングルサインオンはSAML Idp Initiated SSOという方式を使うので、
Salesforce CRMにアクセスするときには、先にADFSサーバーの以下のURLにアクセスします。

https://<ADFSサーバーのFQDN>/adfs/ls/IdpInitiatedSignOn.aspx

すると、最初に下の画面が出てきて、[このサイトにサインインしてください]でADの認証を行い、
image

その後、Salesforce(証明書利用者信頼で指定した名前が表示される)を選択して[移動]すると、
image

ADユーザーのアカウントでSalesforce CRMにログインできたことが確認できます。
image

[私のプロファイル]-[ユーザーの詳細]を参照すれば、
SAML Idp Initiated SSOでシングルサインオンしたことが確認できます。
(私の恥ずかしいサインイン失敗の履歴もこのとおり(笑))
image

■トラブルシューティング
私がSalesforce CRMのシングルサインオンを実装していて、すばらしいと思ったのは
シングルサインオン設定のSAMLアサーション検証から、シングルサインオン失敗の原因が確認できることです。
ログイン時のブラウザーの画面に表示されるエラーだけではトラブルの原因をつかむのはほとんど不可能ですが、
これなら原因をすぐに確認できますね。
(私も自分の設定が間違っていることを知るのに役立ちました)

image

いかがでしたでしょうか?
Salesforce CRMの実装も変わっており、@ITで富士榮さんが記事にされたころよりも
より簡単にシングルサインオンが実装できるようになっていることがわかります。

今回はADFS2.0と認証連携できるアプリケーションとしてSalesforce CRMを取り上げましたが、
ADFS2.0そのものの実装や概念については「ADFS2.0によるIDフェデレーションの実装」コースで
体系的に学ぶことができますので、ご検討いただければと思います。