Shibboleth IdP 3に関する情報をまとめているページです。

動作確認環境

OSJavaServletIdP
CentOS 7.2OpenJDK 7 (CentOS 7.2付属)Apache Tomcat 7.0.54 (CentOS 7.2付属)Shibboleth IdP 3.2.1
CentOS 6.5OpenJDK 7 (CentOS 6.5付属)Apache Tomcat 7.0.62Shibboleth IdP 3.2.1
CentOS 6.5OpenJDK 7 (CentOS 6.5付属)Apache Tomcat 7.0.62Shibboleth IdP 3.1.2
CentOS 6.5Oracle Java 8u45 + JCE Unlimited Strength Jurisdiction Policy FilesApache Tomcat 8.0.23Shibboleth IdP 3.1.2

設定

メタデータ

学認メタデータ

学認メタデータの読み込みはconf/metadata-providers.xmlで設定します。

Shibboleth IdP 3.1の情報

学認メタデータの読み込みはconf/metadata-providers.xmlで設定します。

  • 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="RequiredValidUntil" maxValidityInterval="P15D" />
        <MetadataFilter xsi:type="SignatureValidation"
                        requireSignedMetadata="true"
                        certificateFile="%{idp.home}/credentials/gakunin-signer-2010.cer"/>
        <MetadataFilter xsi:type="EntityRoleWhiteList">
            <RetainedRole>md:SPSSODescriptor</RetainedRole>
        </MetadataFilter>
    
    </MetadataProvider>

ローカルSPメタデータ

ローカルSPのメタデータはmetadata以下に配置して、conf/metadata-providers.xmlで設定します。

参考: 学内システムとして構築する場合の設定

認証

LDAPを用いたパスワード認証

Shibboleth IdP 3からは、LDAPモジュールを用いたJAASによるパスワード認証に加えて、直接LDAPを参照するパスワード認証が追加されました。

デフォルトは直接LDAPを参照するパスワード認証です。

直接LDAPを参照するパスワード認証

JAASによるパスワード認証

Shibboleth IdP 3.1.2で確認した内容です。

LDAPサーバにStartTLSで接続する方法(LDAPサーバがCentOS 6の場合)

以下の個別ページを参照してください。
LDAPサーバにStartTLSで接続する方法(LDAPサーバがCentOS 6の場合)

複数台のLDAPサーバを参照するための方法

以下の個別ページを参照してください。
複数台のLDAPサーバを参照するための方法

高度な認証設定

Shibboleth IdP 3の高度な認証設定を参照してください。

属性・NameID

SPに対してどのような属性が送出されるか確認する方法

以下の個別ページを参照してください。
SPに対してどのような属性が送出されるか確認する方法

NameID

NameID設定を参照してください。

eduPersonTargetedID属性の送信

NameIDとは別に//saml2:AttributeStatement/saml2:Attribute[@FriendlyName="eduPersonTargetedID"]としてeduPersonTargetedID属性を送信する設定は下記の通りです。

なお、この機能はShibboleth IdP 3ではDeprecated Featuresとなっています。

computedId

computedIdでの設定を下記に示します。Shibboleth IdP 2と同じ設定で送信可能です。

conf/attribute-resolver.xmlのComputedIdConnectorはShibboleth IdP 3の機能を用いて、persistent-idの設定で定義したconf/saml-nameid.propertiesのプロパティを使って書くこともできます。

storedId

storedIdでの設定を下記に示します。Shibboleth IdP 2と同じ設定で送信可能です。

conf/attribute-resolver.xmlのStoredIdConnectorはShibboleth IdP 3の機能を用いて、persistent-idの設定で定義したconf/global.xmlのbean MyDataSourceconf/saml-nameid.propertiesのプロパティを使って書くこともできます。

同じ値が再割り当てされないeduPersonTargetedIDの生成方法

以下の個別ページを参照してください。
同じ値が再割り当てされないeduPersonTargetedIDの生成方法

Attribute Query

SAML 2 persistent IDでのAttribute Queryの許可

この機能はcomputedIdを使っている場合は使用できません。まずstoredIdを使うように設定変更してください。

RelyingPartyの設定

SAML1でフロントチャネルにAttributeStatementを含める設定

画面のカスタマイズ

ロゴの変更

ロゴをデフォルトのOur Identity Providerから機関のロゴに変更する手順は下記の通りです。

  1. ロゴファイル organization-logo.pngedit-webapp/images/以下に配置します。 

    $ ls edit-webapp/images/
    dummylogo-mobile.png  dummylogo.png  organization-logo.png
  2. bin/build.shを実行して、war/idp.warを作り直します。

    $ sudo 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. messages/messages.propertiesidp.logoに上記1.で配置したファイル名を設定します。 なお、ファイル名は/images/から始めます。また、 idp.logo.alt-textを設定します。

    # You can define message properties here to override messages defined in
    # system/messages/ or to add your own messages.
    idp.logo = /images/organization-logo.png
    idp.logo.alt-text = Organization logo
     # You can define message properties here to override messages defined in
     # system/messages/ or to add your own messages.
    +idp.logo = /images/organization-logo.png
    +idp.logo.alt-text = Organization logo

メッセージの多言語化

日本語を含む英語以外のメッセージファイルは下記ページからダウンロードできます。

ダウンロードしたメッセージファイルをsystem/messages/ディレクトリ配下(3.2.1以前はmessages/ディレクトリ配下)にコピーすることで、ブラウザに表示されるメッセージを英語以外に変更できます。

3.2.1およびそれ以前と3.3.0およびそれ以降で配置方法が変更になっています。3.3.0およびそれ以降にアップデートした場合は、新たに上記ページから対応するファイルをダウンロードしsystem/messages/ディレクトリに配置してください。(system/以下ですが、一度配置すれば、以降のアップデートで削除されることはありません。)

conf/services.xmlを3.3.0以降の版に更新したら、旧来のmessages/以下の3ファイルは削除可能になります。(逆に言うと、services.xmlを更新しない限り旧来のメッセージファイルが参照されていますので削除すると日本語にならなくなります。)

上記URLで提供している日本語メッセージファイルについての注意点

  1. ボタンに表示するメッセージ(idp.login.login)は、Password認証フローのExtendedフロー使用した際に他の認証と合わせてアルファベットが並ぶように「Login」と英語のままです。
  2. ユーザが存在しない場合のエラーメッセージ(bad-username.message)とパスワードが間違った場合のエラーメッセージ(bad-password.message)は、どちらも「ユーザ名かパスワードが違います。」と同じメッセージです。(英語では、「The username you entered cannot be identified.」と「The password you entered was incorrect.」と異なります)

 

表示されるメッセージの優先順位は下記の通りです。messages/以下およびsystem/messages/以下のファイルが候補になります。

  1. Accept-Languageヘッダーの一番目に一致するmessages_言語_国.properties
  2. Accept-Languageヘッダーの一番目に一致するmessages_言語.properties
  3. Javaのシステムプロパティに一致するmessages_言語_国.properties
  4. Javaのシステムプロパティに一致するmessages_言語.properties
  5. デフォルトのmessages.properties

Javaのシステムプロパティの優先順位は下記の通りです。

  1. コマンドラインオプション user.languageuser.country
  2. 環境変数 LC_MESSAGES
  3. 環境変数 LANG

ブラウザの使用言語によらずある言語を強制する方法は以下のページに説明があります。
https://wiki.shibboleth.net/confluence/display/IDP30/Switching+locale+on+the+login+page

多言語化の方法

3.3以降で、表示するメッセージを英語から日本語などに変更する場合は、下記のメッセージファイルを用意します。文字コードはUTF-8である必要があります。

日本語の場合の例を下記に示します。

イギリス英語の例を下記に示します。

どうしてもlogin.jspを使い回したいのですが

以下の個別ページを参照してください。
どうしてもlogin.jspを使い回したいのですが

ユーザ同意機能

Shibboleth IdP 3には、uApprove相当のユーザ同意機能があります。uApprove JPとの違いはShibboleth IdP 3のユーザ同意機能とuApprove JPとの相違点を参照してください。

ユーザ同意の情報をMySQLに保存する設定

MySQL上にデータベース shibboleth が存在することを前提としております。また、MySQL Connector/J (mysql-connector-java-5.1.xx-bin.jar)をインストールしておいてください。

Shibboleth IdP 3.1の情報
  • 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の定義は重複となるため不要です。

    <!-- 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から、p:maxActivep:maxTotalに、p:maxWaitp:maxWaitMillisに変更になりました。

  • 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

属性毎に同意を得る設定

SPの必須属性にもチェックボックスが表示されるため、利用者がSPの必須属性のチェックを外して属性を送信しなかった場合にSPを利用できない可能性があります。

送信済み属性の属性値が変化した場合に再同意を得る設定

同意機能の無効化設定

ログレベルの変更 

Shibboleth IdP 3.2からの新機能です。

Shibboleth IdP 3.2より、ログレベルの変更がconf/idp.propertiesで行えるようになりました。

アクセス制限(Shibboleth IdP 2のFPSP機能)

Shibboleth IdP 2におけるFPSPによるアクセス制御を行うには、GakuNinShibInstall > 技術ガイド > 実習セミナー > Shibboleth環境構築セミナー(活用編) > Shibboleth IdPによるアクセス制限を参照してください。

クラスタリング

Shibboleth IdP 3においてクラスタリングを行うには、クラスタリング設定を参照してください。

Full SLO(Single Logout)の設定方法

以下の個別ページを参照してください。
Full SLO(Single Logout)の設定方法

IdPv3アップデートに関する情報

以下の個別ページを参照してください。
IdPv3アップデートに関する情報

個別ページ

参考