Shibboleth IdP 3に関する情報をまとめているページです。
注意 |
---|
Shibboleth IdP 3.2に関する情報に更新中です。 |
動作確認環境
65 65付属.62.54 (CentOS 7.2付属) | Shibboleth IdP 3.2.1 |
.2Oracle Java 8u45 + JCE Unlimited Strength Jurisdiction Policy FilesOpenJDK 7 (CentOS 6.5付属) | Apache Tomcat |
823.2 |
CentOS 6.5 | OpenJDK 7 (CentOS 6.5付属) | Apache Tomcat 7.0.62 | Shibboleth IdP 3.1.2 |
CentOS 6.5 | Oracle Java 8u45 + JCE Unlimited Strength Jurisdiction Policy Files | Apache Tomcat 8.0.23 | Shibboleth IdP 3.1.2 |
設定
学認メタデータの読み込み
学認メタデータの読み込みはconf/metadata-providers.xml
で設定します。
メタデータ
認証
属性・NameID
抜粋を含める |
---|
| 属性・NameID |
---|
| 属性・NameID |
---|
nopanel | true |
---|
|
画面のカスタマイズ
抜粋を含める |
---|
| 画面のカスタマイズ |
---|
| 画面のカスタマイズ |
---|
nopanel | true |
---|
|
組み込みのユーザ同意機能について
Shibboleth IdP 3には、uApprove相当のユーザ同意機能が組み込まれています。uApproveJPとの違いはShibboleth IdP 3のユーザ同意機能とuApproveJPとの相違点を参照してください。
ユーザ同意の情報をMySQLに保存する設定
ヒント |
---|
MySQL上にデータベース shibboleth が存在することを前提としております。また、MySQL Connector/J (mysql-connector-java-5.1.xx-bin.jar)をインストールしておいてください。 |
StorageRecordsテーブルの作成
StorageRecordsテーブルを作成します。
展開 |
---|
コード ブロック |
---|
| CREATE TABLE `StorageRecords` (
`context` varchar(255) NOT NULL,
`id` varchar(255) NOT NULL,
`expires` bigint(20) DEFAULT NULL,
`value` longtext NOT NULL,
`version` bigint(20) NOT NULL,
PRIMARY KEY (`context`,`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8; |
|
conf/global.xml
shibboleth.JPAStorageServiceを定義します。persistent-idの設定(storedId)が設定済みの場合、最後のMyDataSourceの定義は重複となるため不要です。
展開 |
---|
コード ブロック |
---|
language | xml |
---|
title | conf/global.xml |
---|
| <!-- Use this file to define any custom beans needed globally. -->
<bean id="shibboleth.JPAStorageService"
class="org.opensaml.storage.impl.JPAStorageService"
p:cleanupInterval="%{idp.storage.cleanupInterval:PT10M}"
c:factory-ref="shibboleth.JPAStorageService.entityManagerFactory" />
<bean id="shibboleth.JPAStorageService.entityManagerFactory"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="packagesToScan" value="org.opensaml.storage.impl" |
|
conf/metadata-providers.xml
展開 |
---|
コード ブロック |
---|
language | xml |
---|
title | conf/metadata-providers.xml |
---|
| <!-- -->
<MetadataProvider id="HTTPMetadata"
xsi:type="FileBackedHTTPMetadataProvider"
backingFile="%{idp.home}/metadata/gakunin-metadata-backing.xml"
metadataURL="https://metadata.gakunin.nii.ac.jp/gakunin-metadata.xml">
<MetadataFilter xsi:type="SignatureValidation" requireSignedRoot="true"
certificateFile="%{idp.home}/credentials/gakunin-signer-2010.cer"/>
<property name="dataSource" ref="MyDataSource" />
<MetadataFilter<property xsi:typename="RequiredValidUntiljpaVendorAdapter" maxValidityIntervalref="P15Dshibboleth.JPAStorageService.JPAVendorAdapter" />
<MetadataFilter xsi:type<property name="EntityRoleWhiteListjpaDialect">
<bean <RetainedRole>md:SPSSODescriptor</RetainedRole>
class="org.springframework.orm.jpa.vendor.HibernateJpaDialect" />
</MetadataFilter>property>
</MetadataProvider>bean>
<!-- --> | コード ブロック |
---|
| -<bean id="shibboleth.JPAStorageService.JPAVendorAdapter"
<!--
+ <!-- --> class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"
<MetadataProvider idp:database="HTTPMetadataMYSQL" />
<!-- A DataSource bean suitable for use in the idp.persistentId.dataSource property. -->
<bean id="MyDataSource"
class="org.apache.commons.dbcp2.BasicDataSource"
xsip:typedriverClassName="FileBackedHTTPMetadataProvidercom.mysql.jdbc.Driver"
- p:url="jdbc:mysql://localhost:3306/shibboleth"
p:username="username"
p:password="password"
backingFile="%{idp.home}/metadata/localCopyFromXYZHTTP.xml"
- p:maxTotal="10"
p:maxIdle="5"
p:maxWaitMillis="15000"
metadataURLp:testOnBorrow="http://WHATEVERtrue">
+ p:validationQuery="select 1"
backingFile="%{idp.home}/metadata/gakunin-metadata-backing.xml"
+ metadataURL="https://metadata.gakunin.nii.ac.jp/gakunin-metadata.xml">
- <MetadataFilter xsi:type="SignatureValidation" requireSignedRoot="true">
- <PublicKey>
- MIIBI.....
- </PublicKey>
- </MetadataFilter>
- <MetadataFilter xsi:type="RequiredValidUntil" maxValidityInterval="P30D"/>
+ <MetadataFilter xsi:type="SignatureValidation" requireSignedRoot="true"
+ certificateFile="%{idp.home}/credentials/gakunin-signer-2010.cer"/>
+ <MetadataFilter xsi:type="RequiredValidUntil" maxValidityInterval="P15D"/>
<MetadataFilter xsi:type="EntityRoleWhiteList">
<RetainedRole>md:SPSSODescriptor</RetainedRole>
</MetadataFilter>
</MetadataProvider>
- -->
+ <!-- --> |
注意 |
---|
Shibboleth IdP 3.2からSignatureValidationFilterのrequireSignedMetadataがrequireSignedRootに変更となりました。requireSignedMetadataの場合、下記のwarningメッセージが表示されます。 書式設定済み |
---|
2015-12-18 18:33:35,232 - WARN [net.shibboleth.idp.profile.spring.relyingparty.metadata.filter.impl.SignatureValidationParser:128] - file [/opt/shibboleth-idp/conf/metadata-providers.xml] Use of the attribute 'requireSignedMetadata' is deprecated, use 'requireSignedRoot' instead |
|
|
Shibboleth IdP 3.1の情報
展開 |
---|
学認メタデータの読み込みはconf/metadata-providers.xml で設定します。 |
認証
LDAPを用いたパスワード認証
Shibboleth IdP 3からは、LDAPモジュールを用いたJAASによるパスワード認証に加えて、直接LDAPを参照するパスワード認証が追加されました。
デフォルトは直接LDAPを参照するパスワード認証です。
直接LDAPを参照するパスワード認証
conf/ldap.properties
参照するLDAPにあわせて、Connection properties, SSL configuration, Search DN resolutionのプロパティを設定します。
展開 |
---|
コード ブロック |
---|
language | java |
---|
title | conf/ldap.properties |
---|
| ## Connection properties ##
idp.authn.LDAP.ldapURL = ldap://localhost:389
idp.authn.LDAP.useStartTLS = false
#idp.authn.LDAP.useSSL = false
#idp.authn.LDAP.connectTimeout = 3000
# Search DN resolution, used by anonSearchAuthenticator, bindSearchAuthenticator
# for AD: CN=Users,DC=example,DC=org
idp.authn.LDAP.baseDN = ou=people,dc=example,dc=ac,dc=jp
idp.authn.LDAP.subtreeSearch = true
idp.authn.LDAP.userFilter = (uid={user})
# bind search configuration
# for AD: idp.authn.LDAP.bindDN=adminuser@domain.com
idp.authn.LDAP.bindDN =
idp.authn.LDAP.bindDNCredential = |
コード ブロック |
---|
| ## Connection properties ##
-idp.authn.LDAP.ldapURL = ldap://localhost:10389
-#idp.authn.LDAP.useStartTLS = true
+idp.authn.LDAP.ldapURL = ldap://localhost:389
+idp.authn.LDAP.useStartTLS = false
#idp.authn.LDAP.useSSL = false
#idp.authn.LDAP.connectTimeout = 3000
# Search DN resolution, used by anonSearchAuthenticator, bindSearchAuthenticator
# for AD: CN=Users,DC=example,DC=org
-idp.authn.LDAP.baseDN = ou=people,dc=example,dc=org
-#idp.authn.LDAP.subtreeSearch = false
+idp.authn.LDAP.baseDN = ou=people,dc=example,dc=ac,dc=jp
+idp.authn.LDAP.subtreeSearch = true
idp.authn.LDAP.userFilter = (uid={user})
# bind search configuration
# for AD: idp.authn.LDAP.bindDN=adminuser@domain.com
-idp.authn.LDAP.bindDN = uid=myservice,ou=system
-idp.authn.LDAP.bindDNCredential = myServicePassword
+idp.authn.LDAP.bindDN =
+idp.authn.LDAP.bindDNCredential = |
|
JAASによるパスワード認証3.1時点の情報
conf/authn/password-authn-config.xml
<import resource="jaas-authn-config.xml" />の行をアンコメントとして、<import resource="ldap-authn-config.xml" />の行をコメントアウトします。
コード ブロック |
---|
language | xml |
---|
title | conf/authn/password-authn-config.xml |
---|
collapse | true |
---|
|
<!-- Choose an import based on the back-end you want to use. -->
<import resource="jaas-authn-config.xml" />
<!-- <import resource="krb5-authn-config.xml" /> -->
<!-- <import resource="ldap-authn-config.xml" /> --> |
conf/authn/jaas.config
参照するLDAPにあわせて、org.ldaptive.jaas.LdapLoginModule required以降の行を設定します。
コード ブロック |
---|
language | xml |
---|
title | conf/authn/jaas.config |
---|
collapse | true |
---|
|
ShibUserPassAuth {
/*
com.sun.security.auth.module.Krb5LoginModule required;
*/
org.ldaptive.jaas.LdapLoginModule required
ldapUrl="ldap://localhost"
baseDn="ou=people,dc=example,dc=ac,dc=jp"
ssl="false"
userFilter="uid={user}"
subtreeSearch="true"
;
}; |
高度な認証設定
Shibboleth IdP 3の高度な認証設定を参照してください。
//saml2:Subject/saml2:NameID
//saml2:Subject/saml2: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
の例を下記に示す。
<NameIDFormat>
がないSPの場合
コード ブロック |
---|
|
<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> |
<NameIDFormat>がurn:oasis:names:tc:SAML:2.0:nameid-format:persistent
の場合
コード ブロック |
---|
|
<saml2:Subject>
<saml2:NameID
Format="urn:oasis:names:tc:SAML:2.0:nameid-format:persistent"
NameQualifier="https://idp.example.ac.jp/idp/shibboleth"
SPNameQualifier="https://sp2.example.jp/shibboleth-sp">oiUiApwGnBP8pS3HZJ02ZW/aOTI=</saml2:NameID> |
transient-idの設定
transient-id
のデフォルトはCryptoTransient
に変更になりました。CryptoTransient
の使用例を下記に示します。
IdP 2系と同じ短いTransient
を使いたい場合は下記の変更を行います。
conf/saml-nameid.properties
idp.transientId.generator
をアンコメントして、値をshibboleth.StoredTransientIdGenerator
に変更します。
展開 |
---|
コード ブロック |
---|
language | java |
---|
title | conf/saml-nameid.properties |
---|
| # Set to shibboleth.StoredTransientIdGenerator for server-side transient ID storage
idp.transientId.generator = shibboleth.StoredTransientIdGenerator |
コード ブロック |
---|
| # Set to shibboleth.StoredTransientIdGenerator for server-side transient ID storage
-#idp.transientId.generator = shibboleth.CryptoTransientIdGenerator
+idp.transientId.generator = shibboleth.StoredTransientIdGenerator |
|
Transient
の使用例を下記に示します。
コード ブロック |
---|
|
<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>
|
persistent-idの設定
computedId
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" />
<!-- --> |
コード ブロック |
---|
| <!-- 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 | 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 = uid4persistentId
#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
# To use a database, use shibboleth.StoredPersistentIdGenerator |
コード ブロック |
---|
| # 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 = uid4persistentId
#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 = changethistosomethingrandom
# To use a database, use shibboleth.StoredPersistentIdGenerator |
|
conf/attribute-resolver.xml
idp.persistentId.sourceAttribute
の値をconf/attribute-resolver.xml
の//resolver:AttributeDefinition
で定義します。
展開 |
---|
コード ブロック |
---|
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>
|
コード ブロック |
---|
| + <!-- ========================================== -->
+ <!-- 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> |
|
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 の値をconf/attribute-resolver.xml の//resolver:AttributeDefinition で定義して、conf/attribute-filter.xml で送信設定を行います。
コード ブロック |
---|
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> |
|
storedId3.1時点の情報
注意 |
---|
IdP 3.1.2までのstoredIdにはrace conditionの問題があり、 IdP 3.2.0からstoredid周りに大きな変更が入ります。 |
storedIdでの設定を下記に示します。
...
conf/saml-nameid.xml
<ref bean="shibboleth.SAML2PersistentGenerator" />
をアンコメントして有効にします。
コード ブロック |
---|
language | xml |
---|
title | conf/aml-nameid.xml |
---|
collapse | true |
---|
|
<!-- 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 |
---|
collapse | true |
---|
|
# 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の場合) |
---|
collapse | true |
---|
|
<!-- Use this file to define any custom beans needed globally. -->
<bean id="shibboleth.MySQLDataSource"
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="shibboleth.MySQLDataSource" /> |
コード ブロック |
---|
language | xml |
---|
title | conf/global.xml (Tomcat 8の場合) |
---|
collapse | true |
---|
|
<!-- Use this file to define any custom beans needed globally. -->
<bean id="shibboleth.MySQLDataSource"
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="shibboleth.MySQLDataSource" /> |
情報 |
---|
Tomcat 8付属のDBCP2から、p:maxActive はp:maxTotal に、p:maxWait はp:maxWaitMillis に変更になりました。 |
...
conf/attribute-resolver.xml
とconf/attribute-filter.xml
idp.persistentId.sourceAttribute
の値をconf/attribute-resolver.xml
の//resolver:AttributeDefinition
で定義して、conf/attribute-filter.xml
で送信設定を行います。
コード ブロック |
---|
language | xml |
---|
title | conf/attribute-resolver.xml |
---|
collapse | true |
---|
|
<!-- ========================================== -->
<!-- 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 |
---|
collapse | true |
---|
|
<!-- 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 |
---|
collapse | true |
---|
|
<util:list id="shibboleth.consent.attribute-release.BlacklistedAttributeIDs">
<value>transientId</value>
<value>persistentId</value>
<value>eduPersonTargetedID</value>
<value>%{idp.persistentId.sourceAttribute}</value>
</util:list> |
p:validationQueryTimeout="5" /> |
|
conf/idp.properties
idp.consent.StorageService
をconf/global.xml
で定義したshibboleth.JPAStorageService
に変更します。
展開 |
---|
コード ブロック |
---|
language | xml |
---|
title | conf/idp.properties |
---|
| # Set to "shibboleth.StorageService" or custom bean for alternate storage of consent
idp.consent.StorageService = shibboleth.JPAStorageService |
コード ブロック |
---|
| # Set to "shibboleth.StorageService" or custom bean for alternate storage of consent
-#idp.consent.StorageService = shibboleth.ClientPersistentStorageService
+idp.consent.StorageService = shibboleth.JPAStorageService |
|
属性毎に同意を得る設定
注意 |
---|
SPの必須属性にもチェックボックスが表示されるため、利用者がSPの必須属性のチェックを外して属性を送信しなかった場合にSPを利用できない可能性があります。これが問題になる場合はuApproveJPの利用をご検討ください。 |
conf/idp.properties
idp.consent.allowPerAttribute
をtrue
に設定することで、属性毎にチェックボックスを付加することができます。
展開 |
---|
コード ブロック |
---|
language | xml |
---|
title | conf/idp.properties |
---|
| # Flags controlling how built-in attribute consent feature operates
#idp.consent.allowDoNotRemember = true
#idp.consent.allowGlobal = true
idp.consent.allowPerAttribute = true |
コード ブロック |
---|
| # Flags controlling how built-in attribute consent feature operates
#idp.consent.allowDoNotRemember = true
#idp.consent.allowGlobal = true
-#idp.consent.allowPerAttribute = false
+idp.consent.allowPerAttribute = true |
|
送信済み属性の属性値が変化した場合に再同意を得る設定
conf/idp.properties
idp.consent.compareValues
をtrue
に設定することで、属性値が変化した場合に再度属性選択画面を表示することができます。
展開 |
---|
コード ブロック |
---|
language | xml |
---|
title | conf/idp.properties |
---|
| # Whether attribute values and terms of use text are compared
idp.consent.compareValues = true |
コード ブロック |
---|
| # Whether attribute values and terms of use text are compared
-#idp.consent.compareValues = false
+idp.consent.compareValues = true |
|
同意機能の無効化設定
conf/relying-party.xml
bean[@parent="Shibboleth.SSO"]
(SAML1)とbean[@parent="SAML2.SSO"]
(SAML2)にあるp:postAuthenticationFlows="attribute-release"
を削除します。
展開 |
---|
コード ブロック |
---|
language | xml |
---|
title | conf/relying-party.xml |
---|
| <!--
Default configuration, with default settings applied for all profiles, and enables
the attribute-release consent flow.
-->
<bean id="shibboleth.DefaultRelyingParty" parent="RelyingParty" |
|
eduPersonTargetedID 属性の送信3.1時点の情報
//saml2:Subject/saml2:NameID
とは別に//saml2:AttributeStatement/saml2:Attribute
[@FriendlyName="eduPersonTargetedID"]
としてeduPersonTargetedID
属性を送信する設定は下記の通りです。
なお、この機能はShibboleth IdP 3ではDeprecated Featuresとなっています。
computedId
computedIdでの設定を下記に示します。Shibboleth IdP 2と同じ設定で送信可能です。
conf/attribute-resolver.xml
コード ブロック |
---|
language | xml |
---|
title | conf/attribute-resolver.xml |
---|
collapse | true |
---|
|
<!-- ========================================== -->
<!-- Attribute Definitions -->
<!-- ========================================== -->
<!-- Schema: eduPerson attributes -->
<!-- Attribute Definition for eduPersonTargetedID -->
<resolver:AttributeDefinition id="eduPersonTargetedID" xsi:type="SAML2NameID" xmlns="urn:mace:shibboleth:2.0:resolver:ad"
nameIdFormat="urn:oasis:names:tc:SAML:2.0:nameid-format:persistent"
sourceAttributeID="computedID">
<resolver:Dependency ref="computedID" />
<resolver:AttributeEncoder xsi:type="SAML1XMLObject" xmlns="urn:mace:shibboleth:2.0:attribute:encoder"
name="urn:oid:1.3.6.1.4.1.5923.1.1.1.10" />
<resolver:AttributeEncoder xsi:type="SAML2XMLObject" xmlns="urn:mace:shibboleth:2.0:attribute:encoder"
name="urn:oid:1.3.6.1.4.1.5923.1.1.1.10" friendlyName="eduPersonTargetedID" />
</resolver:AttributeDefinition>
<!-- ========================================== -->
<!-- Data Connectors -->
<!-- ========================================== -->
<!-- Computed targeted ID connector -->
<resolver:DataConnector xsi:type="ComputedId" xmlns="urn:mace:shibboleth:2.0:resolver:dc"
id="computedID"
generatedAttributeID="computedID"
sourceAttributeID="uid"
salt="changethistosomethingrandom">
<resolver:Dependency ref="myLDAP" />
</resolver:DataConnector> |
conf/attribute-filter.xml
コード ブロック |
---|
language | xml |
---|
title | conf/attribute-filter.xml |
---|
collapse | true |
---|
|
<!-- Release to sp.example.jp -->
<afp:AttributeFilterPolicy id="PolicyforSP1ExampleJP">
<afp:PolicyRequirementRule xsi:type="basic:AttributeRequesterString" value="https://sp.example.jp/shibboleth-sp" />
<afp:AttributeRule attributeID="eduPersonTargetedID">
<afp:PermitValueRule xsi:type="basic:ANY" />
</afp:AttributeRule>
</afp:AttributeFilterPolicy> |
conf/attribute-resolver.xml
のData ConnectorはShibboleth IdP 3の機能を用いて、persistent-idの設定で定義したconf/saml-nameid.propertiesの
プロパティを使って書くこともできます。
conf/attribute-resolver.xml
コード ブロック |
---|
language | xml |
---|
title | conf/attribute-resolver.xml |
---|
collapse | true |
---|
|
<!-- ========================================== -->
<!-- Data Connectors -->
<!-- ========================================== -->
<!-- Computed targeted ID connector -->
<resolver:DataConnector xsi:type="ComputedId" xmlns="urn:mace:shibboleth:2.0:resolver:dc"
id="computedID"
generatedAttributeID="computedID"
sourceAttributeID="%{idp.persistentId.sourceAttribute}"
salt="changethistosomethingrandom">
<!--
salt="%{idp.persistentId.salt}">
-->
<resolver:Dependency ref="%{idp.persistentId.sourceAttribute}" />
</resolver:DataConnector> |
注意 |
---|
Shibboleth IdP 3.1.2では、salt 属性は%{idp.persistentId.salt} で置き換えられませんので、ご注意ください。[IDP-771] |
storedId
storedIdでの設定を下記に示します。Shibboleth IdP 2と同じ設定で送信可能です。
conf/attribute-resolver.xml
コード ブロック |
---|
language | xml |
---|
title | conf/attribute-resolver.xml |
---|
collapse | true |
---|
|
<!-- ========================================== -->
<!-- Attribute Definitions -->
<!-- ========================================== -->
<!-- Schema: eduPerson attributes -->
<!-- Attribute Definition for eduPersonTargetedID -->
<resolver:AttributeDefinition id="eduPersonTargetedID" xsi:type="SAML2NameID" xmlns="urn:mace:shibboleth:2.0:resolver:ad"
nameIdFormat="urn:oasis:names:tc:SAML:2.0:nameid-format:persistent"
sourceAttributeID="StoredId">
<resolver:Dependency ref="StoredId" />
<resolver:AttributeEncoder xsi:type="SAML1XMLObject" xmlns="urn:mace:shibboleth:2.0:attribute:encoder"
name="urn:oid:1.3.6.1.4.1.5923.1.1.1.10" />
<resolver:AttributeEncoder xsi:type="SAML2XMLObject" xmlns="urn:mace:shibboleth:2.0:attribute:encoder"
name="urn:oid:1.3.6.1.4.1.5923.1.1.1.10" friendlyName="eduPersonTargetedID" />
</resolver:AttributeDefinition>
<!-- ========================================== -->
<!-- Data Connectors -->
<!-- ========================================== -->
<!-- Stored targeted ID connector -->
<resolver:DataConnector xsi:type="StoredId" xmlns="urn:mace:shibboleth:2.0:resolver:dc"
id="storedID"
generatedAttributeID="storedID"
sourceAttributeID="uid"
salt="changethistosomethingrandom">
<resolver:Dependency ref="myLDAP" />
<ApplicationManagedConnection jdbcDriver="com.mysql.jdbc.Driver"
jdbcURL="jdbc:mysql://localhost:3306/shibboleth?autoReconnect=true"
jdbcUserName="username"
jdbcPassword="password" />
</resolver:DataConnector> |
conf/attribute-filter.xml
コード ブロック |
---|
language | xml |
---|
title | conf/attribute-filter.xml |
---|
collapse | true |
---|
|
<!-- Release to sp.example.jp -->
<afp:AttributeFilterPolicy id="PolicyforSP1ExampleJP">
<afp:PolicyRequirementRule xsi:type="basic:AttributeRequesterString" value="https://sp.example.jp/shibboleth-sp" />
<afp:AttributeRule attributeID="eduPersonTargetedID">
<afp:PermitValueRule xsi:type="basic:ANY" />
</afp:AttributeRule>
</afp:AttributeFilterPolicy> |
conf/attribute-resolver.xml
のData ConnectorはShibboleth IdP 3の機能を用いて、persistent-idの設定で定義したconf/global.xmlの
beanとconf/saml-nameid.propertiesのプ
ロパティを使って書くこともできます。
conf/attribute-resolver.xml
コード ブロック |
---|
language | xml |
---|
title | conf/attribute-resolver.xml |
---|
collapse | true |
---|
|
<!-- ========================================== -->
<!-- Data Connectors -->
<!-- ========================================== -->
<!-- Stored targeted ID connector -->
<resolver:DataConnector xsi:type="StoredId" xmlns="urn:mace:shibboleth:2.0:resolver:dc"
id="storedID"
generatedAttributeID="storedID"
sourceAttributeID="%{idp.persistentId.sourceAttribute}"
salt="changethistosomethingrandom">
<!--
salt="%{idp.persistentId.salt}">
-->
<resolver:Dependency ref="%{idp.persistentId.sourceAttribute}" />
<BeanManagedConnection>shibboleth.MySQLDataSource</BeanManagedConnection>
</resolver:DataConnector> |
注意 |
---|
Shibboleth IdP 3.1.2では、salt 属性は%{idp.persistentId.salt} で置き換えられませんので、ご注意ください。[IDP-771] |
Attribute Query3.1時点の情報
SAML 2 persistent IDでのAttribute Queryの許可
注意 |
---|
この機能はcomputedIdを使っている場合は使用できません。まずstoredIdを使うように設定変更してください。 |
conf/c14n/subject-c14n.xml
conf/c14n/subject-c14n.xml
の<ref bean="c14n/SAML2Persistent" />
をアンコメントします。
コード ブロック |
---|
language | xml |
---|
title | conf/c14n/subject-c14n.xml |
---|
collapse | true |
---|
|
<!-- Handle a SAML 2 persistent ID, provided a stored strategy is in use. -->
<ref bean="c14n/SAML2Persistent" /> |
画面のカスタマイズ3.1時点の情報
ロゴの変更
ロゴをデフォルトのOur Identity Providerから機関のロゴに変更する手順は下記の通りです。
ロゴファイル organization-logo.png
をedit-webapp/images/
以下に配置します。
書式設定済み |
---|
$ ls edit-webapp/images/
dummylogo-mobile.png dummylogo.png organization-logo.png |
messages/error-messages.properties
のidp.logo
を上記1.で配置したファイル名に変更します。 なお、ファイル名は/images/
から始めます。また、 idp.logo.alt-text
を変更します。
コード ブロック |
---|
language | xml |
---|
title | messages/error-messages.properties |
---|
collapse | true |
---|
|
idp.logo = /images/organization-logo.png
idp.logo.alt-text = Organization logo |
bin/build.sh
を実行して、war/idp.war
を作り直します。
書式設定済み |
---|
$ sudo -u tomcat env JAVA_HOME="${JAVA_HOME}" bin/build.sh
Installation Directory: [/opt/shibboleth-idp]
Rebuilding /opt/shibboleth-idp/war/idp.war ...
...done
BUILD SUCCESSFUL
Total time: 16 seconds |
メッセージの多言語化
表示するメッセージを英語から日本語などに変更する場合は、下記の3つのメッセージファイルを用意します。文字コードはUTF-8である必要があります。
messages/authn-messages_言語[_国].properties
messages/consent-messages_言語[_国].properties
messages/error-messages_言語[_国].properties
日本語の場合の例を下記に示します。
messages/authn-messages_ja.properties
messages/consent-messages_ja.properties
messages/error-messages_ja.properties
イギリス英語の例を下記に示します。
messages/authn-messages_en_GB.properties
messages/consent-messages_en_GB.properties
messages/error-messages_en_GB.properties
表示されるメッセージの優先順位は下記の通りです。
Accept-Language
ヘッダーの一番目に一致するmessage_言語_国.properties
Accept-Language
ヘッダーの一番目に一致するmessage_言語.properties
- Javaのシステムプロパティに一致する
message_言語_国.properties
- Javaのシステムプロパティに一致する
message_言語.properties
- デフォルトの
message.properties
Javaのシステムプロパティの優先順位は下記の通りです。
- コマンドラインオプション
user.language
とuser.country
- 環境変数
LC_MESSAGES
- 環境変数
LANG
ユーザ同意機能3.1時点の情報
Shibboleth IdP 3には、uApprove相当のユーザ同意機能があります。uApprove JPとの違いはShibboleth IdP 3のユーザ同意機能とuApprove JPとの相違点を参照してください。
ユーザ同意の情報をMySQLに保存する設定
StorageRecordsテーブルの作成
コード ブロック |
---|
language | sql |
---|
title | MySQL |
---|
collapse | true |
---|
|
CREATE TABLE `StorageRecords` (
`context` varchar(255) NOT NULL,
`id` varchar(255) NOT NULL,
`expires` bigint(20) DEFAULT NULL,
`value` longtext NOT NULL,
`version` bigint(20) NOT NULL,
PRIMARY KEY (`context`,`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8; |
conf/global.xml
shibboleth.JPAStorageService
を定義します。persistent-idの設定が設定済みの場合、shibboleth.MySQLDataSource
の定義は不要です。
コード ブロック |
---|
language | xml |
---|
title | conf/global.xml (Tomcat7の場合) |
---|
collapse | true |
---|
|
<!-- Use this file to define any custom beans needed globally. -->
<bean id="shibboleth.JPAStorageService"
class="org.opensaml.storage.impl.JPAStorageService"
p:cleanupInterval="%{idp.storage.cleanupInterval:PT10M}"
c:factory-ref="shibboleth.JPAStorageService.entityManagerFactory" />
<bean id="shibboleth.JPAStorageService.entityManagerFactory"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="packagesToScan" value="org.opensaml.storage.impl" /dataSource" ref="shibboleth.MySQLDataSource" /<propertyname="jpaVendorAdapter"ref="shibboleth.JPAStorageService.JPAVendorAdapter" />
<propertyname="jpaDialect">
classorg.springframework.orm.jpa.vendor.HibernateJpaDialect</property>
</bean>
<bean id="shibboleth.JPAStorageService.JPAVendorAdapter" <ref bean="SAML1.AttributeQuery" />
| class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"
p:databaseMYSQLSAML1.ArtifactResolution" />
|
idshibbolethMySQLDataSourceclassorg.apache.tomcat.dbcp.dbcp.BasicDataSource"
p:driverClassName="com.mysql.jdbc.Driver"
p:url="jdbc:mysql://localhost:3306/shibboleth"
p:username="username"
p:passwordpassword"p:maxActive="10"
p:maxIdle5"SAML2.ArtifactResolution" />
| p:maxWait="15000"
p:testOnBorrowtrue"p:validationQuery="select 1" p:validationQueryTimeout="5" /> | xml | conf/global.xml (Tomcat8の場合) | |
collapse | true |
---|
<Use this file to define any custom beans needed globally. -->
<bean id="shibboleth.JPAStorageService"
class="org.opensaml.storage.impl.JPAStorageService" Default configuration, with default settings applied for all profiles, and enables
the attribute-release consent flow.
| p:cleanupInterval="%{idp.storage.cleanupInterval:PT10M}"c:factory-refJPAStorageService.entityManagerFactory/
<bean id="shibboleth.JPAStorageService.entityManagerFactory"
classorg.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean<property name="packagesToScan" value="org.opensaml.storage.impl" />
<property name="dataSource" ref="shibboleth.MySQLDataSource <bean parent="Shibboleth.SSO" p:postAuthenticationFlows="attribute-release" />
+ | <property name="jpaVendorAdapter" ref="shibboleth.JPAStorageService.JPAVendorAdapter <bean parent="Shibboleth.SSO" />
| <propertyname="jpaDialect">
<beanclassorg.springframework.orm.jpa.vendor.HibernateJpaDialect</property>
</bean>
<bean id="shibboleth.JPAStorageService.JPAVendorAdapter"
<ref bean="SAML1.ArtifactResolution" />
- | class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"
<bean parent="SAML2.SSO" p: | databasepostAuthenticationFlows=" | MYSQL
<bean id="shibboleth.MySQLDataSource"
class="org.apache.tomcat.dbcp.dbcp2.BasicDataSource"
p:driverClassNamecom.mysql.jdbc.Driver"
p:url="jdbc:mysql://localhost:3306/shibboleth"
p:usernameusername"p:password="password"
p:maxIdle="5"
p:maxTotal10"
p:maxWaitMillis="15000"
p:testOnBorrow="true"
p:validationQueryselect 1"p:validationQueryTimeout="5" /> |
情報 |
---|
Tomcat 8付属のDBCP2から、p:maxActive はp:maxTotal に、p:maxWait はp:maxWaitMillis に変更になりました。 |
conf/idp.properties
コード ブロック |
---|
language | xml |
---|
title | conf/idp.properties |
---|
collapse | true |
---|
|
# Set to "shibboleth.StorageService" or custom bean for alternate storage of consent
idp.consent.StorageService = shibboleth.JPAStorageService
# Maximum number of consent storage records
# Set to -1 for unlimited server-side storage
idp.consent.maxStoredRecords = -1 |
属性毎に同意を得る設定
conf/idp.properties
idp.consent.allowPerAttribute
をtrue
に設定することで、属性毎にチェックボックスを付加することができます。
コード ブロック |
---|
language | xml |
---|
title | conf/idp.properties |
---|
collapse | true |
---|
|
idp.consent.allowPerAttribute = true |
注意 |
---|
SPの必須属性にもチェックボックスが表示されるため、利用者がSPの必須属性のチェックを外して属性を送信しなかった場合にSPの利用できない可能性があります。 |
送信済み属性の属性値が変化した場合に再同意を得る設定
conf/idp.properties
コード ブロック |
---|
language | xml |
---|
title | conf/idp.properties |
---|
collapse | true |
---|
|
# Whether attribute values and terms of use text are compared
idp.consent.compareValues = true |
...
<ref bean="SAML2.ArtifactResolution" />
<ref bean="Liberty.SSOS" />
</list>
</property>
</bean> |
|
ログレベルの変更
情報 |
---|
Shibboleth IdP 3.2からの新機能です。 |
Shibboleth IdP 3.2より、ログレベルの変更がconf/idp.properties
で行えるようになりました。
conf/idp.properties
設定できるプロパティ名はconf/logback.confの先頭を参照してください。
展開 |
---|
コード ブロック |
---|
language | java |
---|
title | conf/idp.properties |
---|
| # Logging Level
idp.loglevel.idp=DEBUG
idp.loglevel.messages=DEBUG
idp.loglevel.encryption=DEBUG |
コード ブロック |
---|
| +# Logging Level
+idp.loglevel.idp=DEBUG
+idp.loglevel.messages=DEBUG
+idp.loglevel.encryption=DEBUG |
|
...
Shibboleth IdP 3においてクラスタリングを行うには、クラスタリング設定を参照してください。
...
Full SLO(Single Logout)の設定方法
以下の個別ページを参照してください。
⇒Full SLO(Single Logout)の設定方法
クライアントIPアドレスチェックの無効化
抜粋を含める |
---|
| クライアントIPアドレスチェックの無効化 |
---|
| クライアントIPアドレスチェックの無効化 |
---|
nopanel | true |
---|
|
IdPv3アップデートに関する情報
以下の個別ページを参照してください。
⇒IdPv3アップデートに関する情報
トラブルシューティング(IdPv3)
ページを含める |
---|
| トラブルシューティング(IdPv3) |
---|
| トラブルシューティング(IdPv3) |
---|
|
個別ページ(それぞれの内容は基本的に上記内容に埋め込まれています)
参考
- [Shibboleth wiki] Identity Provider 3
- [Shibboleth wiki] IdP 3 / ReleaseNotes
- [SWITCH] Shibboleth Identity Provider (IdP) 3 Installation Guide
- [SWITCH] Shibboleth IdPv3: Considerations in the Context of SWITCHaai
- 3.1 Operating Systems: Linux long-term support (Ubuntu Server 14.04 LTS / Red Hat Enterprise Linux 7 / CentOS 7)
- 3.2 Java & Servlet Container: OpenJDK 7, Apache Tomcat 7 & Apache HTTP Server 2.4
- 3.3 Database for persistentIDs and user consent: PostgreSQL
- 3.4 IdP Session Storage: Client Session Storage with Cookies
- [upki-fed:00880] Re: Shibboleth IdP 3.0 リリース
- シボレス実習活用編
- 学認技術ガイド > IdP構築後のカスタマイズ 内「IdPアップデート手順」学認技術ガイド > 貴学にてIdPv3をインストールする場合の構築手順貴学にてIdPv3をインストールする場合の構築手順
- NIIオープンフォーラム2016 学認トラック
- 「Shibboleth IdPバージョン3に向けたNIIの取り組み」西村 健(NII)
- 「Shibboleth IdP ver.3との戦い」細川 達己(慶應義塾大学)