Active DirectoryにおけるeduPersonスキーマの利用(成城大学提供)

[検証内容]

Shibboleth IdP で Windows Server 2003 R2 の Active Directory を直接データソースとして利用する際の設定方法を検証する.尚,ここでは UPKI イニシアティブ学術認証フェデレーションで公開されている技術ガイド(以下「技術ガイド」という)を基に,Active Directory 用の設定部分のみに言及し,他の設定については省略する.

 



1. UPKI フェデレーションで利用するスキーマの導入

Active Directory 用 eduPerson スキーマを以下の URL からダウンロードする.
https://spaces.internet2.edu/display/macedir/Active+Directory+eduPerson
コマンドプロンプトで,ldifde.exe を実行してスキーマを拡張する.log を c:\tmp に出力して,ssotest.seijo.ac.jp ドメインに対してスキーマ拡張するにはパラメータを以下のように与える.

ldifde -i -f eduPerson.adschema.ldif -j c:\tmp\log.txt -c "DC=X" "DC=ssotest,DC=seijooo,DC=ac,DC=jp"

 その後,MMC の Active Directory スキーマ スナップインで追加した属性を選択してプロパティを開き,[グローバル カタログにこの属性をレプリケートする] にチェックを入れる.
*この設定をしないとグローバルカタログに問い合わせた際に属性値が参照できなくなる.詳細については後述する.

 



2. テストデータの作成

PowerShell を使ってユーザー作成時に拡張属性に値を設定する.以下のスクリプトでは eduPersonAffiliation 属性の値を staff に設定している.

$strOU = "ou=mnc,dc=ssotest,dc=seijooo,dc=ac,dc=jp"
$prinStr = "@ssotest.seijo.ac.jp"

$Password = Read-Host "Password" -asSecureString
$oOU = [ADSI]"LDAP://$strOU"

$name = "zazu"
$kname = "座図"
$cnx = "cn=" + $name
$snx = "sn=" + $kname

$oUser = $oOU.Create("user", $cnx)
$oUser.Put("sAMAccountName", $name)
$oUser.Put("userPrincipalName", $name+$prinStr)
$oUser.Put("sn", $kname)
$oUser.setInfo()

$oUser.SetPassword($Password.ToString())
$oUser.Put("userAccountControl","66176")
$oUser.Put("eduPersonAffiliation","staff") # ← eduPersonAffiliation 値の追加
$oUser.setInfo()





3. login.config ファイルの編集

https://wiki.shibboleth.net/confluence/display/SHIB2/IdPADConfigIssues に Active Directory 設定時の注意点が解説されており,Port 3268 を使ってグローバルカタログへ接続すると Referral 問題を回避できる.以下はグローバルカタログを持つホスト mncssotad.seijooo.ac.jp に ldapadm ユーザーで接続するサンプル設定である.Active Directory の場合 userField は sAMAccoutName を使用する.
ShibUserPassAuth {
   edu.vt.middleware.ldap.jaas.LdapLoginModule required
      host="mncssotad.seijooo.ac.jp"
      port="3268"
      base="dc=ssotest,dc=seijooo,dc=ac,dc=jp"
      ssl="false"
      userField="sAMAccountName"
      serviceUser="ldapadm@ssotest.seijo.ac.jp"
      serviceCredential="ldapadm のパスワード"
      subtreeSearch="true";
};





4. attribute-resolver.xml ファイルの編集

eduPersonPrincipalName を有効にする場合は,sourceAttributeID にsAMAccountNameを指定する.

  <!-- Attribute Definition for eduPersonPrincipalName -->
    <resolver:AttributeDefinition id="eduPersonPrincipalName" xsi:type="Scoped" xmlns="urn:mace:shibboleth:2.0:resolver:ad"
        scope="seijo.ac.jp" sourceAttributeID="sAMAccountName">
        <resolver:Dependency ref="myLDAP" />
        <resolver:AttributeEncoder xsi:type="SAML1ScopedString" xmlns="urn:mace:shibboleth:2.0:attribute:encoder"
            name="urn:mace:dir:attribute-def:eduPersonPrincipalName" />
        <resolver:AttributeEncoder xsi:type="SAML2ScopedString" xmlns="urn:mace:shibboleth:2.0:attribute:encoder"
            name="urn:oid:1.3.6.1.4.1.5923.1.1.1.6" friendlyName="eduPersonPrincipalName" />
    </resolver:AttributeDefinition>

 eduPersonAffiliation を有効にする場合は,コメント記述子を外すだけでよい.

   <!-- Attribute Definition for eduPersonAffiliation -->
    <resolver:AttributeDefinition id="eduPersonAffiliation" xsi:type="Simple" xmlns="urn:mace:shibboleth:2.0:resolver:ad"
        sourceAttributeID="eduPersonAffiliation">
        <resolver:Dependency ref="myLDAP" />
        <resolver:AttributeEncoder xsi:type="SAML1String" xmlns="urn:mace:shibboleth:2.0:attribute:encoder"
            name="urn:mace:dir:attribute-def:eduPersonAffiliation" />
        <resolver:AttributeEncoder xsi:type="SAML2String" xmlns="urn:mace:shibboleth:2.0:attribute:encoder"
            name="urn:oid:1.3.6.1.4.1.5923.1.1.1.1" friendlyName="eduPersonAffiliation" />
    </resolver:AttributeDefinition>

 LDAP Connector を Port 3268 で設定する.FilterTemplate タグ中でもsAMAccountName を指定する.

    <resolver:DataConnector id="myLDAP" xsi:type="LDAPDirectory" xmlns="urn:mace:shibboleth:2.0:resolver:dc"
        ldapURL="ldap://mncssotad.seijooo.ac.jp:3268"
        baseDN="dc=ssotest,dc=seijo,dc=ac,dc=jp"
        principal="ldapadm@ssotest.seijooo.ac.jp"
        principalCredential="ldapadm のパスワード">
        <FilterTemplate>
            <![CDATA[
                (sAMAccountName=$requestContext.principalName)
            ]]>
        </FilterTemplate>
    </resolver:DataConnector>

 その他 Shibboleth Idp の設定については技術ガイドの通り行う.

 



5. 接続テスト

https://test-sp00.gakunin.nii.ac.jp/ に接続し,eduPersonAffiliation 属性が表示されていることが確認できる.

 


6.その他

LDAP Connector が取得した値を確認するには,logging.xml で,以下のようにLog Level を DEBUG に変更し,idp-proccess.log を参照する.

    <logger name="edu.internet2.middleware.shibboleth">
        <level value="DEBUG" />
    </logger>

 グローバルカタログに eduPerson スキーマをレプリケートするよう設定してあれば,idp-proccess.log で以下のように結果が表示される.

18:59:48.397 - DEBUG [edu.vt.middleware.ldap.Ldap:566] - Search with the following parameters:
18:59:48.397 - DEBUG [edu.vt.middleware.ldap.Ldap:567] -   dn = dc=ssotest,dc=seijooo,dc=ac,dc=jp
18:59:48.397 - DEBUG [edu.vt.middleware.ldap.Ldap:568] -   filter = (sAMAccountName=zazu)
18:59:48.399 - DEBUG [edu.vt.middleware.ldap.Ldap:569] -   filterArgs =
18:59:48.399 - DEBUG [edu.vt.middleware.ldap.Ldap:571] -     none
18:59:48.400 - DEBUG [edu.vt.middleware.ldap.Ldap:575] -   retAttrs =
18:59:48.400 - DEBUG [edu.vt.middleware.ldap.Ldap:577] -     all attributes
18:59:48.400 - TRACE [edu.vt.middleware.ldap.Ldap:582] -   config = {java.naming.provider.url=ldap://mncssotad.seijooo.ac.jp:3268, java.naming.factory.initial=com.sun.jndi.ldap.LdapCtxFactory}
18:59:48.403 - DEBUG [edu.internet2.middleware.shibboleth.common.attribute.resolver.provider.dataConnector.LdapDataConnector:882] - Found the following attribute: uSNChanged=[33134]
18:59:48.403 - DEBUG [edu.internet2.middleware.shibboleth.common.attribute.resolver.provider.dataConnector.LdapDataConnector:882] - Found the following attribute: eduPersonAffiliation=[staff]