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 の設定については技術ガイドの通り行う.
6. 接続テスト
https://test-sp00.gakunin.nii.ac.jp/ に接続し,eduPersonAffiliation 属性が表示されていることが確認できる.
7. その他
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] |