Active DirectoryにおけるeduPersonスキーマ(拡張スキーマ)の利用(成城大学提供)
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 で以下のように結果が表示される.