Shibboleth IdP 3に関する情報をまとめているページです。
Shibboleth IdP 3.2に関する情報に更新中です。 |
OS | Java | Servlet | IdP |
---|---|---|---|
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 |
CentOS 6.5 | OpenJDK 7 (CentOS 6.5付属) | Apache Tomcat 7.0.62 | Shibboleth IdP 3.2.1 |
学認メタデータの読み込みはconf/metadata-providers.xml
で設定します。
conf/metadata-providers.xml
|
学認メタデータの読み込みは
|
Shibboleth IdP 3からは、LDAPモジュールを用いたJAASによるパスワード認証に加えて、直接LDAPを参照するパスワード認証が追加されました。
デフォルトは直接LDAPを参照するパスワード認証です。
conf/ldap.properties
参照するLDAPにあわせて、Connection properties, SSL configuration, Search DN resolutionのプロパティを設定します。
|
conf/authn/password-authn-config.xml
<import resource="jaas-authn-config.xml" />の行をアンコメントとして、<import resource="ldap-authn-config.xml" />の行をコメントアウトします。
<!-- 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以降の行を設定します。
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
は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> がない |
|
SPメタデータに複数の<NameIDFormat>
がある場合は、SPメタデータの並び順で送信可能な属性を送信します。persistent-id
の設定を行っていないなど送信可能な属性がない場合は、//saml2:Subject/saml2:NameID
自体が送信されません。
がないSPの場合と<NameIDFormat>
<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
のデフォルトは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系と同じ短いTransientId
を使いたい場合は下記の変更を行います。
conf/saml-nameid.properties
idp.transientId.generator
をアンコメントして、値をshibboleth.StoredTransientIdGenerator
に変更します。
|
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> |
computedIdでの設定を下記に示します。
conf/saml-nameid.xml
<ref bean="shibboleth.SAML2PersistentGenerator" />
をアンコメントして有効にします。
|
conf/saml-nameid.properties
idp.persistentId.generator
のデフォルトはComputedId
の設定のため、idp.persistentId.sourceAttribute
とidp.persistentId.salt
のみを設定します。idp.persistentId.salt
には他人が推測できないランダムな値を指定してください。古いIdPから設定を引き継ぐ場合は同じ値を指定してください。
|
conf/attribute-resolver.xml
idp.persistentId.sourceAttribute
で指定した属性がLDAPで定義されているのみでconf/attribute-resolver.xml
の//resolver:AttributeDefinition
で定義されていない場合は、PersistentIdGenerator
から参照できませんので以下のように定義します。他の用途に使用しない場合resolver:AttributeEncoder
の2行は不要です。
|
computedIdでの設定を下記に示します。
|
storedIdでの設定を下記に示します。
|
//saml2:Subject/saml2:NameID
とは別に//saml2:AttributeStatement/saml2:Attribute
[@FriendlyName="eduPersonTargetedID"]
としてeduPersonTargetedID
属性を送信する設定は下記の通りです。
なお、この機能はShibboleth IdP 3ではDeprecated Featuresとなっています。
computedIdでの設定を下記に示します。Shibboleth IdP 2と同じ設定で送信可能です。
conf/attribute-resolver.xml
|
conf/attribute-filter.xml
|
conf/attribute-resolver.xml
のData ConnectorはShibboleth IdP 3の機能を用いて、persistent-idの設定で定義したconf/saml-nameid.propertiesの
プロパティを使って書くこともできます。
conf/attribute-resolver.xml
|
storedIdでの設定を下記に示します。Shibboleth IdP 2と同じ設定で送信可能です。
conf/attribute-resolver.xml
|
conf/attribute-filter.xml
|
conf/attribute-resolver.xml
のData ConnectorはShibboleth IdP 3の機能を用いて、persistent-idの設定で定義したconf/global.xmlの
beanとconf/saml-nameid.propertiesのプ
ロパティを使って書くこともできます。
conf/attribute-resolver.xml
|
この機能はcomputedIdを使っている場合は使用できません。まずstoredIdを使うように設定変更してください。 |
conf/c14n/subject-c14n.xmlconf/c14n/subject-c14n.xml
の<ref bean="c14n/SAML2Persistent" />
をアンコメントします。
|
ロゴをデフォルトの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
を変更します。
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
message_言語_国.properties
message_言語.properties
message.properties
Javaのシステムプロパティの優先順位は下記の通りです。
user.language
とuser.country
LC_MESSAGES
LANG
Shibboleth IdP 3には、uApprove相当のユーザ同意機能があります。uApprove JPとの違いはShibboleth IdP 3のユーザ同意機能とuApprove JPとの相違点を参照してください。
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
の定義は不要です。
<!-- 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" /> <property name="dataSource" ref="MyDataSource" /> <property name="jpaVendorAdapter" ref="shibboleth.JPAStorageService.JPAVendorAdapter" /> <property name="jpaDialect"> <bean class="org.springframework.orm.jpa.vendor.HibernateJpaDialect" /> </property> </bean> <bean id="shibboleth.JPAStorageService.JPAVendorAdapter" class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" p:database="MYSQL" /> <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. --> <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" /> <property name="dataSource" ref="MyDataSource" /> <property name="jpaVendorAdapter" ref="shibboleth.JPAStorageService.JPAVendorAdapter" /> <property name="jpaDialect"> <bean class="org.springframework.orm.jpa.vendor.HibernateJpaDialect" /> </property> </bean> <bean id="shibboleth.JPAStorageService.JPAVendorAdapter" class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" p:database="MYSQL" /> <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" /> |
Tomcat 8付属のDBCP2から、 |
conf/idp.properties
# 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
に設定することで、属性毎にチェックボックスを付加することができます。
idp.consent.allowPerAttribute = true |
SPの必須属性にもチェックボックスが表示されるため、利用者がSPの必須属性のチェックを外して属性を送信しなかった場合にSPを利用できない可能性があります。 |
conf/idp.properties
# Whether attribute values and terms of use text are compared idp.consent.compareValues = true |
Shibboleth IdP 3.2より、ログレベルの変更がconf/idp.properties
で行えるようになりました。
conf/idp.properties
設定できるプロパティ名はconf/logback.confの先頭を参照してください。
|
Shibboleth IdP 2におけるFPSPによるアクセス制御を行うには、GakuNinShibInstall > 技術ガイド > 実習セミナー > Shibboleth環境構築セミナー(活用編) > Shibboleth IdPによるアクセス制限を参照してください。
Shibboleth IdP 3においてクラスタリングを行うには、クラスタリング設定を参照してください。