2013年5月21日火曜日

[SharePoint]JPSPSフォローアップ:認証設定①~フォームベース認証

先日(5/18)に Japan SharePoint Group (http://jpsps.com/)さんの定例勉強会にお邪魔して SharePoint のアイデンティティ管理の話をしてきました。

当日の資料はこちら


当日は時間もなかったので、簡単なデモを見せることしか出来なかったので、環境の構築の方法について解説しておこうと思います。

まずは、認証の設定についてです。
当日はフォームベース認証と SAML トークンベース認証の2つのデモをお見せしましたが、今回はフォームベース認証について解説します。(Active Directory を LDAP の認証データベースとして利用します)

認証の設定を行い、実際にサイトを利用するには、大まかに以下の手順が必要です。
1.認証プロバイダの作成
2.Web アプリケーションの認証プロバイダの設定
3.Web アプリケーションのユーザーポリシーの設定
4.ユーザープロファイルとの紐づけ設定
5.動作確認 では順番に手順を解説します。

1.認証プロバイダの作成

 この手順では、SharePoint Server が認識する認証プロバイダを作成します。フォームベース認証の場合は、以下の3つの Web サイトの web.config ファイルの編集を行う必要があります。
  - サーバの全体管理(SharePoint Central Administration v4)
  - Security Token Service(SharePoint Web Services - SecurityTokenServiceApplication)
  - 対象の SharePoint Web アプリケーション(作成した名前)
   ※括弧内は IIS マネージャより見える Web サイトの名前

 IIS マネージャより上記それぞれの Web サイトに対応するフォルダを開き、 web.config を編集します。対象の Web サイトを右クリックしてエクスプローラを開いたところにある web.config が編集対象です。



 各 Web サイトの web.config を以下の用に設定します。

  - サーバの全体管理(SharePoint Central Administration v4)

  ・<system.web> セクションの以下をコメントアウト
    <roleManager>
      <providers>
      </providers>
    </roleManager>
    <membership>
      <providers>
      </providers>
    </membership>

 ・以下を追記
<membership defaultProvider="AspNetSqlMembershipProvider">
      <providers>
        <add name="LDAPMember"
             type="Microsoft.Office.Server.Security.LdapMembershipProvider, Microsoft.Office.Server, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c"
             server="ADサーバ名.xxx.xxx"
             port="389"
             useSSL="false"
             userDNAttribute="distinguishedName"
             userNameAttribute="sAMAccountName"
             userContainer="OU=フォームベース認証するユーザを入れるOU,DC=xxx,DC=xxx"
             userObjectClass="person"
             userFilter="(ObjectClass=person)"
             scope="Subtree"
             otherRequiredUserAttributes="sn,givenname,cn" />
      </providers>
    </membership>
    <roleManager enabled="true" defaultProvider="AspNetWindowsTokenRoleProvider" >
      <providers>
        <add name="LDAPRole"
             type="Microsoft.Office.Server.Security.LdapRoleProvider, Microsoft.Office.Server, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c"
             server="ADサーバ名.xxx.xxx" 
             port="389"
             useSSL="false"
             groupContainer="OU=フォームベース認証するユーザを入れるOU,DC=xxx,DC=xxx"
             groupNameAttribute="cn"
             groupNameAlternateSearchAttribute="samAccountName"
             groupMemberAttribute="member"
             userNameAttribute="sAMAccountName"
             dnAttribute="distinguishedName"
             groupFilter="((ObjectClass=group)"
             userFilter="((ObjectClass=person)"
             scope="Subtree" />
      </providers>
 </roleManager>

 - Security Token Service(SharePoint Web Services - SecurityTokenServiceApplication)

  ・<Configuration>セクションに以下を追記
<system.web>
    <membership>
      <providers>
        <add name="LDAPMember"
             type="Microsoft.Office.Server.Security.LdapMembershipProvider, Microsoft.Office.Server, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c"
             server="ADサーバ名.xxx.xxx"
             port="389"
             useSSL="false"
             userDNAttribute="distinguishedName"
             userNameAttribute="sAMAccountName"
             userContainer="OU=フォームベース認証するユーザを入れるOU,DC=xxx,DC=xxx"
             userObjectClass="person"
             userFilter="(&amp;(ObjectClass=person))"
             scope="Subtree"
             otherRequiredUserAttributes="sn,givenname,cn" />
      </providers>
    </membership>
    <roleManager enabled="true" >
      <providers>
        <add name="LDAPRole"
             type="Microsoft.Office.Server.Security.LdapRoleProvider, Microsoft.Office.Server, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c"
             server="ADサーバ名.xxx.xxx"
             port="389"
             useSSL="false"
             groupContainer="フォームベース認証するユーザを入れるOU,DC=xxx,DC=xxx"
             groupNameAttribute="cn"
             groupNameAlternateSearchAttribute="samAccountName"
             groupMemberAttribute="member"
             userNameAttribute="sAMAccountName"
             dnAttribute="distinguishedName"
             groupFilter="(&amp;(ObjectClass=group))"
             userFilter="(&amp;(ObjectClass=person))"
             scope="Subtree" />
      </providers>
    </roleManager>
  </system.web>

 - 対象の SharePoint Web アプリケーション(作成した名前)

  ・<membership defaultProvider="i">の<providers>セクションに以下を追記

        <add name="LDAPMember" type="Microsoft.Office.Server.Security.LdapMembershipProvider, Microsoft.Office.Server, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" server="ADサーバ名.xxx.xxx" port="389" useSSL="false" userDNAttribute="distinguishedName" userNameAttribute="sAMAccountName" userContainer="OU=フォームベース認証するユーザを入れるOU,DC=xxx,DC=xxx" userObjectClass="person" userFilter="(&amp;(ObjectClass=person))" scope="Subtree" otherRequiredUserAttributes="sn,givenname,cn" />

 ・<roleManager defaultProvider="c" enabled="true" cacheRolesInCookie="false">の<providers>セクションに以下を追記

        <add name="LDAPRole" type="Microsoft.Office.Server.Security.LdapRoleProvider, Microsoft.Office.Server, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" server="ADサーバ名.xxx.xxx" port="389" useSSL="false" groupContainer="OU=フォームベース認証するユーザを入れるOU,DC=xxx,DC=xxx" groupNameAttribute="cn" groupNameAlternateSearchAttribute="samAccountName" groupMemberAttribute="member" userNameAttribute="sAMAccountName" dnAttribute="distinguishedName" groupFilter="(&amp;(ObjectClass=group))" userFilter="(&amp;(ObjectClass=person))" scope="Subtree" />


2.Web アプリケーションの認証プロバイダの設定

 次は、Web アプリケーションに使用する認証プロバイダの設定を行います。
 [サーバの全体管理]から[Web アプリケーションの管理]を開き、対象の Web アプリケーションを選択し、[認証プロバイダー]を開きます。



認証プロバイダの領域では[既定]をクリックし、設定画面を開きます。



クレーム認証の種類のセクションで、[フォームベース認証(FBA)の有効化]にチェックを入れ、[ASP.NETメンバーシッププロバイダ名]に「LDAPMember(先ほど web.config に書いた名前)」、[ASP.NETロールマネージャ名]に「LDAPRole(先ほど web.config に書いた名前)」を設定し、保存します。





3.Web アプリケーションのユーザーポリシーの設定

 次は設定した認証プロバイダで認証されたユーザが Web アプリケーションへアクセスできるように設定します。
 先の手順と同様に[サーバの全体管理]から[Web アプリケーションの管理]を開き、対象の Web アプリケーションを選択し、[ユーザーポリシー]を開き、Web アプリケーションのポリシー画面で[ユーザーの追加]を開きます。



 対象の領域を聞かれるので[すべて]を選択し、[ユーザーの追加]画面の[ユーザーの選択]からユーザピッカーを開きます。


 [すべてのユーザー]から[すべてのユーザー(LDAPMember)]を追加し、元の画面に戻り、[権限の選択]で必要な権限を付与します。(画面は読み取り権限を与えています)




4.ユーザープロファイルとの紐づけ設定

 ここまでで認証とログインまでは出来るようになりましたが、SharePoint 上のユーザとの紐づけが出来ていません。つまり、認証とログインは出来ますが別途 User Profile Service 等で ID ストアから読み込んだユーザ情報と紐づけが出来ませんので、顔写真や姓・名などがうまく表示されない状態です。

 そこで、認証されたユーザと SharePoint 上のユーザプロファイルの紐づけ設定を行います。概念としては下図の通りです。



 今回作ったフォームベース認証プロバイダでは LDAP(AD)の sAMAccountName 属性を識別子として利用しているので、ユーザプロファイルの[クレームユーザーID]という属性が LDAP の sAMAccountName 属性の値と一致していれば同じユーザとみなす、という設定を行います。

 User Profile Service の詳しい設定については後日解説しますが、まず[サーバの全体管理]から[サービスアプリケーション]、[サービスアプリケーションの管理]、[User Profile Service Application]を開き、[ひと]セクションの[ユーザープロパティの管理]を開きます。
 この中の[クレームユーザーID]属性の編集を開きます。



 ここで認証プロバイダ LDAP の sAMAccountName をインポートするように設定し、保存します。



 この状態で[プロファイル同期の開始]で[完全同期]を行うと新しいマッピング状態を含めプロファイルが同期されます。  これで設定は完了です。


5.動作確認

 では、先ほどのサイトへアクセスしてみます。設定が上手く行っていればサインイン方法の選択が出来るようになっています。



 ここでフォーム認証を選択すると認証フォームが表示されますので、認証DB(今回は Active Directory)上に作成したユーザの sAMAccountName とパスワードでログインします。



 ちなみに Active Directory 上に作成したユーザは以下の通りです。



 認証がうまくいくとサイトが使えるようになっており、プロファイルには Active Directory 上に設定したユーザの情報が反映されているはずです。下図は Active Directory 上に顔写真を入れておき、SharePoint へ同期した例です。




今回はここまでです。次回は SAML トークンベース認証を Windows Azure Access Control Service と設定し、Facebook や Google アカウントでログインする方法を解説します。

0 件のコメント: