NameID はconf/attribute-filter.xml に記述しなくてもconf/saml-nameid.properties とconf/saml-nameid.xml の設定により、SPメタデータの<NameIDFormat>に従って 下記の通り送信します。
SPメタデータの<NameIDFormat> の値 | 送信する属性 |
---|
urn:oasis:names:tc:SAML:2.0:nameid-format:transient | transient-id | urn:oasis:names:tc:SAML:2.0:nameid-format:persistent | persistent-id | <NameIDFormat> がない | saml-nameid.properties のidp.nameid.saml2.default に従う。
デフォルトはurn:oasis:names:tc:SAML:2.0:nameid-format:transient
|
SPメタデータに複数の<NameIDFormat> がある場合は、SPメタデータの並び順で送信可能な属性を送信します。persistent-id の設定を行っていないなど送信可能な属性がない場合は、//saml2:Subject/saml2:NameID 自体が送信されません。
<NameIDFormat> がないSPの場合と<NameIDFormat> がurn:oasis:names:tc:SAML:2.0:nameid-format:persistent の場合の//saml2:Subject/saml2:NameID の例を下記に示す。の例を下記に示します。
transient-idの設定transient-id のデフォルトはCryptoTransientId に変更になりました。CryptoTransientId の使用例を下記に示します。
コード ブロック |
---|
| <saml2:Subject>
<saml2:NameID
Format="urn:oasis:names:tc:SAML:2.0:nameid-format:transient"
NameQualifier="https://idp.example.ac.jp/idp/shibboleth"
SPNameQualifier="https://sp1.example.jp/shibboleth-sp">AAdzZWNyZXQxgUnobM3/AN3fn8DfZPDqBp/GnKNxc5JR4nxXAxDAXZZSg0AZSrDh1Sip1fl9JGYrm2NWjl8zHKxHmbsgS/mFZ1ZlSYQ2U/Kz7tCQ+SDswixwLRcGg3tDvVSAY8imKSrElGWSm5gMM45D4rkeQONJYr7gQZ13</saml2:NameID> |
IdP 2系と同じ短いtransient-id を使いたい場合は下記の変更を行います。 StoredTransientId の使用例を下記に示します。
コード ブロック |
---|
| <saml2:Subject>
<saml2:NameID
Format="urn:oasis:names:tc:SAML:2.0:nameid-format:transient"
NameQualifier="https://idp.example.ac.jp/idp/shibboleth"
SPNameQualifier="https://sp1.example.jp/shibboleth-sp">_f358fb015b9b45c7d18a4a2647e79c33</saml2:NameID>
|
関連: [Shibboleth Wiki] Disable use of internal encryption key persistent-idの設定computedIdcomputedIdでの設定を下記に示します。 conf/saml-nameid.xml
<ref bean="shibboleth.SAML2PersistentGenerator" /> をアンコメントして有効にします。
展開 |
---|
コード ブロック |
---|
language | xml |
---|
title | conf/saml-nameid.xml |
---|
| <!-- Uncommenting this bean requires configuration in saml-nameid.properties. -->
<!-- -->
<ref bean="shibboleth.SAML2PersistentGenerator" />
<!-- --> |
コード ブロック |
---|
| <!-- Uncommenting this bean requires configuration in saml-nameid.properties. -->
- <!--
+ <!-- -->
<ref bean="shibboleth.SAML2PersistentGenerator" />
- -->
+ <!-- --> |
|
ヒント |
---|
一部のSPにだけpersistent-idを送信したい場合、当該箇所をアンコメントせずに、以下を挿入すると対象SPを指定することができます。 コード ブロック |
---|
| <bean parent="shibboleth.SAML2PersistentGenerator">
<property name="activationCondition">
<bean parent="shibboleth.Conditions.RelyingPartyId" c:candidates="#{{'https://test-sp1.gakunin.nii.ac.jp/shibboleth-sp', 'https://test-sp2.gakunin.nii.ac.jp/shibboleth-sp'}}" />
</property>
</bean> |
|
conf/saml-nameid.properties
idp.persistentId.generator のデフォルトはComputedId の設定のため、idp.persistentId.sourceAttribute とidp.persistentId.salt のみを設定します。idp.persistentId.salt には他人が推測できないランダムな値を指定してください。古いIdPから設定を引き継ぐ場合は同じ値を指定してください。
展開 |
---|
コード ブロック |
---|
language | java |
---|
title | conf/saml-nameid.properties |
---|
| # Persistent IDs can be computed on the fly with a hash, or managed in a database
# For computed IDs, set a source attribute and a secret salt:
idp.persistentId.sourceAttribute = uid
#idp.persistentId.useUnfilteredAttributes = true
# Do *NOT* share the salt with other people, it's like divulging your private key.
#idp.persistentId.algorithm = SHA
idp.persistentId.salt = XXXXXXXXXXXXXXXXXXXXXXXXXXX |
コード ブロック |
---|
| # Persistent IDs can be computed on the fly with a hash, or managed in a database
# For computed IDs, set a source attribute and a secret salt:
-#idp.persistentId.sourceAttribute = changethistosomethingreal
+idp.persistentId.sourceAttribute = uid
#idp.persistentId.useUnfilteredAttributes = true
# Do *NOT* share the salt with other people, it's like divulging your private key.
#idp.persistentId.algorithm = SHA
-#idp.persistentId.salt = changethistosomethingrandom
+idp.persistentId.salt = XXXXXXXXXXXXXXXXXXXXXXXXXXX |
|
conf/attribute-resolver.xml
idp.persistentId.sourceAttribute で指定した属性がLDAPで定義されているのみでconf/attribute-resolver.xml の対応するresolver:AttributeDefinition がコメントアウトされている場合は、当該resolver:AttributeDefinition をアンコメントします。(以下はsourceAttribute としてuid を指定した場合の例)
展開 |
---|
コード ブロック |
---|
language | xml |
---|
title | conf/attribute-resolver.xml |
---|
| <!-- Schema: Core schema attributes-->
<!-- -->
<resolver:AttributeDefinition xsi:type="ad:Simple" id="uid" sourceAttributeID="uid">
<resolver:Dependency ref="myLDAP" />
<resolver:AttributeEncoder xsi:type="enc:SAML1String" name="urn:mace:dir:attribute-def:uid" encodeType="false" />
<resolver:AttributeEncoder xsi:type="enc:SAML2String" name="urn:oid:0.9.2342.19200300.100.1.1" friendlyName="uid" encodeType="false" />
</resolver:AttributeDefinition>
<!-- |
コード ブロック |
---|
| <!-- Schema: Core schema attributes-->
- <!--
+ <!-- -->
<resolver:AttributeDefinition xsi:type="ad:Simple" id="uid" sourceAttributeID="uid">
<resolver:Dependency ref="myLDAP" />
<resolver:AttributeEncoder xsi:type="enc:SAML1String" name="urn:mace:dir:attribute-def:uid" encodeType="false" />
<resolver:AttributeEncoder xsi:type="enc:SAML2String" name="urn:oid:0.9.2342.19200300.100.1.1" friendlyName="uid" encodeType="false" />
</resolver:AttributeDefinition>
+ <!-- |
情報 |
---|
他の用途に使用しない場合はresolver:AttributeEncoder の2行はコメントアウトしてかまいません。 |
|
Shibboleth IdP 3.1の情報 展開 |
---|
computedIdでの設定を下記に示します。 conf/saml-nameid.xml
<ref bean="shibboleth.SAML2PersistentGenerator" /> をアンコメントして有効にします。
コード ブロック |
---|
language | xml |
---|
title | conf/saml-nameid.xml |
---|
| <!-- Uncommenting this bean requires configuration in saml-nameid.properties. -->
<!-- -->
<ref bean="shibboleth.SAML2PersistentGenerator" />
<!-- --> |
conf/saml-nameid.properties
idp.persistentId.generator のデフォルトはComputedId の設定のため、idp.persistentId.sourceAttribute とidp.persistentId.salt のみを設定します。 コード ブロック |
---|
language | sass |
---|
title | conf/saml-nameid.properties |
---|
| # Set to shibboleth.StoredPersistentIdGenerator for db-backed storage
# and uncomment/name the PersistentIdStore bean to use
#idp.persistentId.generator = shibboleth.ComputedPersistentIdGenerator
# Otherwise for computed PersistentIDs set the source attribute and salt.
idp.persistentId.sourceAttribute = uid4persistentId
idp.persistentId.salt = changethistosomethingrandom |
conf/attribute-resolver.xml とconf/attribute-filter.xml
idp.persistentId.sourceAttribute で指定した属性がLDAPで定義されているのみでconf/attribute-resolver.xml のresolver:AttributeDefinition で定義されていない場合は、PersistentIdGenerator から参照できませんので以下のように定義し、conf/attribute-filter.xml で送信設定を行います。他の用途に使用しない場合resolver:AttributeEncoder の2行は不要です。
コード ブロック |
---|
language | xml |
---|
title | conf/attribute-resolver.xml |
---|
| <!-- ========================================== -->
<!-- PersistentId Definition -->
<!-- ========================================== -->
<!-- Attribute Definition for %{idp.persistentId.sourceAttribute} -->
<resolver:AttributeDefinition id="%{idp.persistentId.sourceAttribute}" xsi:type="ad:Simple"
sourceAttributeID="uid">
<resolver:Dependency ref="myLDAP" />
</resolver:AttributeDefinition> |
コード ブロック |
---|
language | xml |
---|
title | conf/attribute-filter.xml |
---|
| <!-- Release to anyone -->
<afp:AttributeFilterPolicy id="PolicyforAnyone">
<afp:PolicyRequirementRule xsi:type="basic:ANY" />
<afp:AttributeRule attributeID="%{idp.persistentId.sourceAttribute}">
<afp:PermitValueRule xsi:type="basic:ANY" />
</afp:AttributeRule>
</afp:AttributeFilterPolicy> |
conf/intercept/consent-intercept-config.xml ユーザ同意画面にて%{idp.persistentId.sourceAttribute} を表示しないように、util:list[@id="shibboleth.consent.attribute-release.BlacklistedAttributeIDs"]に%{idp.persistentId.sourceAttribute} を追加します。
コード ブロック |
---|
language | xml |
---|
title | conf/intercept/consent-intercept-config.xml |
---|
| <util:list id="shibboleth.consent.attribute-release.BlacklistedAttributeIDs">
<value>transientId</value>
<value>persistentId</value>
<value>eduPersonTargetedID</value>
<value>%{idp.persistentId.sourceAttribute}</value>
</util:list> |
|
storedIdstoredIdでの設定を下記に示します。 ヒント |
---|
MySQL上にデータベース shibboleth が存在することを前提としております。また、MySQL Connector/J (mysql-connector-java-5.1.xx-bin.jar)をインストールしておいてください。 |
conf/saml-nameid.xml
<ref bean="shibboleth.SAML2PersistentGenerator" /> をアンコメントして有効にします。
展開 |
---|
コード ブロック |
---|
language | xml |
---|
title | conf/saml-nameid.xml |
---|
| <!-- Uncommenting this bean requires configuration in saml-nameid.properties. -->
<!-- -->
<ref bean="shibboleth.SAML2PersistentGenerator" />
<!-- --> |
コード ブロック |
---|
| <!-- Uncommenting this bean requires configuration in saml-nameid.properties. -->
- <!--
+ <!-- -->
<ref bean="shibboleth.SAML2PersistentGenerator" />
- -->
+ <!-- --> |
|
ヒント |
---|
一部のSPにだけpersistent-idを送信したい場合、当該箇所をアンコメントせずに、以下を挿入すると対象SPを指定することができます。 コード ブロック |
---|
| <bean parent="shibboleth.SAML2PersistentGenerator">
<property name="activationCondition">
<bean parent="shibboleth.Conditions.RelyingPartyId" c:candidates="#{{'https://test-sp1.gakunin.nii.ac.jp/shibboleth-sp', 'https://test-sp2.gakunin.nii.ac.jp/shibboleth-sp'}}" />
</property>
</bean> |
|
conf/saml-nameid.properties
idp.persistentId.sourceAttribute, idp.persistentId.salt, idp.persistentId.generatorとidp.persistentId.store を設定します。idp.persistentId.salt には他人が推測できないランダムな値を指定してください。古いIdPから設定を引き継ぐ場合は同じ値を指定してください。
展開 |
---|
コード ブロック |
---|
language | java |
---|
title | conf/saml-nameid.properties |
---|
| # Persistent IDs can be computed on the fly with a hash, or managed in a database
# For computed IDs, set a source attribute and a secret salt:
idp.persistentId.sourceAttribute = uid
#idp.persistentId.useUnfilteredAttributes = true
# Do *NOT* share the salt with other people, it's like divulging your private key.
#idp.persistentId.algorithm = SHA
idp.persistentId.salt = XXXXXXXXXXXXXXXXXXXXXXXXXXX
# To use a database, use shibboleth.StoredPersistentIdGenerator
idp.persistentId.generator = shibboleth.StoredPersistentIdGenerator
# For basic use, set this to a JDBC DataSource bean name:
idp.persistentId.dataSource = MyDataSource
# For advanced use, set to a bean inherited from shibboleth.JDBCPersistentIdStore
#idp.persistentId.store = MyPersistentIdStore
# Set to an empty property to skip hash-based generation of first stored ID
#idp.persistentId.computed = shibboleth.ComputedPersistentIdGenerator |
コード ブロック |
---|
| # Persistent IDs can be computed on the fly with a hash, or managed in a database
# For computed IDs, set a source attribute and a secret salt:
-#idp.persistentId.sourceAttribute = changethistosomethingreal
+idp.persistentId.sourceAttribute = uid
#idp.persistentId.useUnfilteredAttributes = true
# Do *NOT* share the salt with other people, it's like divulging your private key.
#idp.persistentId.algorithm = SHA
-#idp.persistentId.salt = changethistosomethingrandom
+idp.persistentId.salt = XXXXXXXXXXXXXXXXXXXXXXXXXXX
# To use a database, use shibboleth.StoredPersistentIdGenerator
-#idp.persistentId.generator = shibboleth.ComputedPersistentIdGenerator
+idp.persistentId.generator = shibboleth.StoredPersistentIdGenerator
# For basic use, set this to a JDBC DataSource bean name:
-#idp.persistentId.dataSource = PersistentIdDataSource
+idp.persistentId.dataSource = MyDataSource
# For advanced use, set to a bean inherited from shibboleth.JDBCPersistentIdStore
#idp.persistentId.store = MyPersistentIdStore
# Set to an empty property to skip hash-based generation of first stored ID
#idp.persistentId.computed = shibboleth.ComputedPersistentIdGenerator |
|
conf/attribute-resolver.xml
idp.persistentId.sourceAttribute で指定した属性がLDAPで定義されているのみでconf/attribute-resolver.xml の対応するresolver:AttributeDefinition がコメントアウトされている場合、当該resolver:AttributeDefinition をアンコメントします。(以下はsourceAttribute としてuid を指定した場合の例)
展開 |
---|
コード ブロック |
---|
language | xml |
---|
title | conf/attribute-resolver.xml |
---|
| <!-- Schema: Core schema attributes-->
<!-- -->
<resolver:AttributeDefinition xsi:type="ad:Simple" id="uid" sourceAttributeID="uid">
<resolver:Dependency ref="myLDAP" />
<resolver:AttributeEncoder xsi:type="enc:SAML1String" name="urn:mace:dir:attribute-def:uid" encodeType="false" />
<resolver:AttributeEncoder xsi:type="enc:SAML2String" name="urn:oid:0.9.2342.19200300.100.1.1" friendlyName="uid" encodeType="false" />
</resolver:AttributeDefinition>
<!-- |
コード ブロック |
---|
| <!-- Schema: Core schema attributes-->
- <!--
+ <!-- -->
<resolver:AttributeDefinition xsi:type="ad:Simple" id="uid" sourceAttributeID="uid">
<resolver:Dependency ref="myLDAP" />
<resolver:AttributeEncoder xsi:type="enc:SAML1String" name="urn:mace:dir:attribute-def:uid" encodeType="false" />
<resolver:AttributeEncoder xsi:type="enc:SAML2String" name="urn:oid:0.9.2342.19200300.100.1.1" friendlyName="uid" encodeType="false" />
</resolver:AttributeDefinition>
+ <!-- |
情報 |
---|
他の用途に使用しない場合はresolver:AttributeEncoder の2行はコメントアウトしてかまいません。 |
|
shibpidテーブルの作成 shibpidテーブルを作成します。 展開 |
---|
コード ブロック |
---|
| CREATE TABLE shibpid (
localEntity VARCHAR(255) NOT NULL,
peerEntity VARCHAR(255) NOT NULL,
persistentId VARCHAR(50) NOT NULL,
principalName VARCHAR(50) NOT NULL,
localId VARCHAR(50) NOT NULL,
peerProvidedId VARCHAR(50) NULL,
creationDate TIMESTAMP NOT NULL,
deactivationDate TIMESTAMP NULL,
PRIMARY KEY (localEntity, peerEntity, persistentId)
) ENGINE=InnoDB DEFAULT CHARSET=utf8; |
|
conf/global.xml
conf/global.xml でbean MyDataSource を定義します。ユーザ同意の情報をMySQLに保存する設定もしくはuApproveJP等で設定済みの場合、重複となるためこの定義は不要です。
展開 |
---|
コード ブロック |
---|
language | xml |
---|
title | conf/global.xml (Tomcat7の場合) |
---|
| <!-- Use this file to define any custom beans needed globally. -->
<!-- A DataSource bean suitable for use in the idp.persistentId.dataSource property. -->
<bean id="MyDataSource"
class="org.apache.tomcat.dbcp.dbcp.BasicDataSource"
p:driverClassName="com.mysql.jdbc.Driver"
p:url="jdbc:mysql://localhost:3306/shibboleth"
p:username="username"
p:password="password"
p:maxActive="10"
p:maxIdle="5"
p:maxWait="15000"
p:testOnBorrow="true"
p:validationQuery="select 1"
p:validationQueryTimeout="5" /> |
コード ブロック |
---|
| <!-- Use this file to define any custom beans needed globally. -->
+ <!-- A DataSource bean suitable for use in the idp.persistentId.dataSource property. -->
+ <bean id="MyDataSource"
+ class="org.apache.tomcat.dbcp.dbcp.BasicDataSource"
+ p:driverClassName="com.mysql.jdbc.Driver"
+ p:url="jdbc:mysql://localhost:3306/shibboleth"
+ p:username="username"
+ p:password="password"
+ p:maxActive="10"
+ p:maxIdle="5"
+ p:maxWait="15000"
+ p:testOnBorrow="true"
+ p:validationQuery="select 1"
+ p:validationQueryTimeout="5" /> |
|
Shibboleth IdP 3.1の情報 展開 |
---|
conf/saml-nameid.xml
<ref bean="shibboleth.SAML2PersistentGenerator" /> をアンコメントして有効にします。
コード ブロック |
---|
language | xml |
---|
title | conf/aml-nameid.xml |
---|
| <!-- Uncommenting this bean requires configuration in saml-nameid.properties. -->
<!-- -->
<ref bean="shibboleth.SAML2PersistentGenerator" />
<!-- --> |
conf/saml-nameid.properties
idp.persistentId.generator, idp.persistentId.store, idp.persistentId.sourceAttributeとidp.persistentId.saltを設定します。
コード ブロック |
---|
language | xml |
---|
title | conf/saml-nameid.properties |
---|
| # Set to shibboleth.StoredPersistentIdGenerator for db-backed storage
# and uncomment/name the PersistentIdStore bean to use
idp.persistentId.generator = shibboleth.StoredPersistentIdGenerator
idp.persistentId.store = PersistentIdStore
# Set this to null to skip hash-based generation of first stored ID
#idp.persistentId.computed = shibboleth.ComputedPersistentIdGenerator
# Otherwise for computed PersistentIDs set the source attribute and salt.
idp.persistentId.sourceAttribute = uid4persistentId
idp.persistentId.salt = changethistosomethingrandom |
conf/global.xml
idp.persistentId.store の値をconf/global.xml で定義します。
コード ブロック |
---|
language | xml |
---|
title | conf/global.xml (Tomcat 7の場合) |
---|
| <!-- Use this file to define any custom beans needed globally. -->
<bean id="MyDataSource"
class="org.apache.tomcat.dbcp.dbcp.BasicDataSource"
p:driverClassName="com.mysql.jdbc.Driver"
p:url="jdbc:mysql://localhost:3306/shibboleth"
p:username="username"
p:password="password"
p:maxActive="10"
p:maxIdle="5"
p:maxWait="15000"
p:testOnBorrow="true"
p:validationQuery="select 1"
p:validationQueryTimeout="5" />
<bean id="PersistentIdStore"
class="net.shibboleth.idp.saml.nameid.impl.JDBCPersistentIdStore"
p:dataSource-ref="MyDataSource" /> |
コード ブロック |
---|
language | xml |
---|
title | conf/global.xml (Tomcat 8の場合) |
---|
| <!-- Use this file to define any custom beans needed globally. -->
<bean id="MyDataSource"
class="org.apache.tomcat.dbcp.dbcp2.BasicDataSource"
p:driverClassName="com.mysql.jdbc.Driver"
p:url="jdbc:mysql://localhost:3306/shibboleth"
p:username="username"
p:password="password"
p:maxIdle="5"
p:maxTotal="10"
p:maxWaitMillis="15000"
p:testOnBorrow="true"
p:validationQuery="select 1"
p:validationQueryTimeout="5" />
<bean id="PersistentIdStore"
class="net.shibboleth.idp.saml.nameid.impl.JDBCPersistentIdStore"
p:dataSource-ref="MyDataSource" /> |
情報 |
---|
Tomcat 8付属のDBCP2から、p:maxActive はp:maxTotal に、p:maxWait はp:maxWaitMillis に変更になりました。 |
conf/attribute-resolver.xmlとconf/attribute-filter.xml
idp.persistentId.sourceAttribute で指定した属性がLDAPで定義されているのみでconf/attribute-resolver.xmlのresolver:AttributeDefinition で定義されていない場合は、PersistentIdGenerator から参照できませんので以下のように定義し、conf/attribute-filter.xml で送信設定を行います。他の用途に使用しない場合resolver:AttributeEncoder の2行は不要です。
コード ブロック |
---|
language | xml |
---|
title | conf/attribute-resolver.xml |
---|
| <!-- ========================================== -->
<!-- PersistentId Definition -->
<!-- ========================================== -->
<!-- Attribute Definition for %{idp.persistentId.sourceAttribute} -->
<resolver:AttributeDefinition id="%{idp.persistentId.sourceAttribute}" xsi:type="ad:Simple"
sourceAttributeID="uid">
<resolver:Dependency ref="myLDAP" />
</resolver:AttributeDefinition> |
コード ブロック |
---|
language | xml |
---|
title | conf/attribute-filter.xml |
---|
| <!-- Release to anyone -->
<afp:AttributeFilterPolicy id="PolicyforAnyone">
<afp:PolicyRequirementRule xsi:type="basic:ANY" />
<afp:AttributeRule attributeID="%{idp.persistentId.sourceAttribute}">
<afp:PermitValueRule xsi:type="basic:ANY" />
</afp:AttributeRule>
</afp:AttributeFilterPolicy> |
conf/intercept/consent-intercept-config.xml ユーザ同意画面にて%{idp.persistentId.sourceAttribute}を表示しないように、util:list[@id="shibboleth.consent.attribute-release.BlacklistedAttributeIDs"]に%{idp.persistentId.sourceAttribute} を追加します。
コード ブロック |
---|
language | xml |
---|
title | conf/intercept/consent-intercept-config.xml |
---|
| <util:list id="shibboleth.consent.attribute-release.BlacklistedAttributeIDs">
<value>transientId</value>
<value>persistentId</value>
<value>eduPersonTargetedID</value>
<value>%{idp.persistentId.sourceAttribute}</value>
</util:list> |
|
|