子ページ
  • Full SLO(Single Logout)の設定方法

比較バージョン

キー

  • この行は追加されました。
  • この行は削除されました。
  • 書式設定が変更されました。
注意

本稿でSLOの設定方法を説明していますが、学認のIdP/SPに対してSLOの実装を強制もしくは推奨するものではありません。

2016年9月時点で学認が把握している範囲においてSLOを実装しているIdP/SPは少数であり、対向のIdPもしくはSPが全てSLOに対応していることを期待することはできません。すなわち、仮に自組織の学認参加IdPでSLO対応したとしても、それにより学認の全てのSPからログアウトできるかのような説明は避けてください。

ひとまず、学内サービスと学内IdPのように限られた範囲でSLOを有効化する際の参考として、ご利用いただければと思います。

なお、学認のスタンスとは異なりますが、SLOについてShibboleth開発元では以下のように表現しております。短期的に何かあるというわけではございませんがご留意のほどお願いいたします。詳細はリンク先をご確認ください。
https://wiki.shibboleth.net/confluence/display/IDP4/LogoutConfiguration

It has no future.

情報

以下の手順でメタデータにフロントチャネルのエンドポイントのみを記載していますが、これはユーザにSLOを実行するか否かの選択肢を残すためです。もしかしたら「IdPからもログアウトしたくない」という要望があるかもしれませんが、それは今後の検討課題です。なお、SPからのリクエストをバックチャネルを用いることは可能ですが、IdPからのバックチャネルリクエストは3

.2.1時点で実装されていません。また、前者を使う際にはIdPのセッションストレージがサーバ側のものを用いていることを確認してください。なお、IdPがSPからのリクエストをバックチャネルを用いて受けることは可能ですが、IdPからSPへバックチャネルリクエストを送る機能は3.xでは実装されていません。IdPv4からの新機能となります(IDP-964)。また、前者を使う際にはIdPのセッションストレージがサーバ側のものを用いていることを確認してください。

ShibbolethにおけるSLO (Single Logout) の設定方法を記載します。

...

IdPのメタデータに <IDPSSODescriptor> の子要素として <SingleLogoutService> を追加します。LocationのIdPのホスト名部分は適宜読み替え適切に設定して下さい。IdPが特殊な設定でなければ、ホスト名部分のみ合わせれば問題ありません。

パネル

       </ds:KeyInfo>
    </KeyDescriptor>
    <SingleLogoutService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="https://IdPのホスト名/idp/profile/SAML2/POST/SLO"
                         xmlns:aslo="urn:oasis:names:tc:SAML:2.0:protocol:ext:async-slo" aslo:supportsAsynchronous="true"/>

← 追加


    <SingleLogoutService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect" Location="https://IdPのホスト名/idp/profile/SAML2/Redirect/SLO"
                         xmlns:aslo="urn:oasis:names:tc:SAML:2.0:protocol:ext:async-slo" aslo:supportsAsynchronous="true"/>

← 追加


        ↑上記4行を追加
    <NameIDFormat>urn:mace:shibboleth:1.0:nameIdentifier</NameIDFormat>
    <NameIDFormat>urn:oasis:names:tc:SAML:2.0:nameid-format:transient</NameIDFormat>
    <SingleSignOnService Binding="urn:mace:shibboleth:1.0:profiles:AuthnRequest" Location="https://IdPのホスト名/idp/profile/Shibboleth/SSO"/>
    <SingleSignOnService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="https://IdPのホスト名/profile/SAML2/POST/SSO"/>
    <SingleSignOnService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect" Location="https://IdPのホスト名/idp/profile/SAML2/Redirect/SSO"/>
  </IDPSSODescriptor>

注意

メタデータ内の要素は並び順が決まっているものがありますので注意してください。特に<IDPSSODescriptor>の子要素については下記の順番となるように<SingleLogoutService>を挿入してください。

  • <KeyDescriptor>
  • <ArtifactResolutionService>
  • <SingleLogoutService>
  • <NameIDFormat>
  • <SingleSignOnService>
展開
title<IDPSSODescriptor>の全子要素の並び順...
  • (ds:Signature)
  • md:Extensions
  • md:KeyDescriptor
  • (md:Organization)
  • (md:ContactPerson)
  • md:ArtifactResolutionService
  • md:SingleLogoutService
  • md:ManageNameIDService
  • md:NameIDFormat
  • md:SingleSignOnService
  • md:NameIDMappingService
  • md:AssertionIDRequestService
  • md:AttributeProfile
  • saml:Attribute

...

パネル

https://SPのホスト名/Shibboleth.sso/Logout にアクセス後の画面遷移

SP-initiatedのSLO実行時でもIdPの画面に遷移します。
認証セッションが確立しているSPがログアウト対象として一覧に表示されますがアクセスしたSPは表示されません。
メタデータに<SingleLogoutService>が追加されていない(Full SLOに対応していない)SPも表示されますがログアウトは実施されません。 


Section
Column

a) 上記画面で Yes を選択、或いは規定の秒数経過後の画面遷移

Full SLOに対応しているSPにはが表示され、対応していないSPにはが表示されます。
上の画面例でが表示されているSPは、SP側で保持しているIdPメタデータに<SingleLogoutService>が存在しないためSP-initiatedのSLOが実行できない環境でした。

Column

b) 上記画面で No を選択後の画面遷移

アクセスしたSP及びIdPからはログアウトされますが他のSPからはログアウトされません。

 


https://SPのホスト名/Shibboleth.sso/Logout にアクセスした際に他のSPにログインしていない場合の画面遷移

アクセスしたSP及びIdPからのログアウトが実施されSLOが完了します。IdPの画面で完了するのは Async SLOの挙動であり、SPの設定で大元のSPの画面への遷移を強制することも可能です。

...


IdP-initiatedのSLO

ログインしているIdPの次のURLにアクセスすることで、アクセスしたIdP、及びIdPとの間に認証セッションが確立している全てのSPからログアウトしようとします。

...

パネル

https://IdPのホスト名/idp/profile/Logout にアクセス後の画面遷移

認証セッションが確立している全てのSPがログアウト対象として一覧に表示されます。
メタデータに<SingleLogoutService>が追加されていない(Full SLOに対応していない)SPも表示されますがログアウトは実施されません。 


Section
Column

a) 上記画面で Yes を選択、或いは規定の秒数経過後の画面遷移

Full SLOに対応しているSPにはが表示され、対応していないSPにはが表示されます。
上の画面例でが表示されているSPは、SP側で保持しているIdPメタデータに<SingleLogoutService>が存在しないためFull SLOが実行できない環境でした。

Column

b) 上記画面で No を選択後の画面遷移

IdPからはログアウトされますがSPからはログアウトされません。

注意

IdP 3.2.1時点では上記操作実行後Webブラウザが次のようなエラーメッセージを表示する画面へ遷移し、SPからのログアウトが実施されません。(IdPからはログアウトされています)

本件はIdP 3.3.0リリースで修正される予定です。

参考: IDP-892IDP-956

--
Image Removed

SPのSLO対応について、Shibbolethセッションを使ってWebアプリケーションを構成している場合はこの手順で完了ですが、Webアプリケーションで独自のセッションを管理している場合、Shibbolethセッションと連動させるために以下に挙げた改修が必要です。

  1. アプリケーションセッション中でもShibbolethセッションがなくなっていればセッションを終了させる。
    (チェックせずに利用している部分があるとそこが抜け穴となりますので、全てのアプリケーションセッション利用でShibbolethセッションの存在をチェックするようご注意ください)
注意

SPのSLO対応について、Shibbolethセッションを使ってWebアプリケーションを構成している場合はこの手順で完了ですが、Webアプリケーションで独自のセッションを管理している場合、Shibbolethセッションと連動させるためにいくつかの改修が必要です。

  1. アプリケーションセッション中でもShibbolethセッションがなくなっていればセッションを終了させる。
  2. Webアプリケーションにおけるログアウトのタイミングで/Shibboleth.sso/Logoutを呼ぶ。
    参考: GakuNinShare - 設定・運用・カスタマイズ - WebアプリケーションのログアウトフローへのShibbolethログアウト処理の挿入
  3. (SLOの通知を受けセッションを破棄する)
    参考: https://wiki.shibboleth.net/confluence/display/SHIB2/NativeSPNotify
    ※これがなくても次回アクセス時に1.の処理でセッションは破棄されるはずです。厳密なセッション管理を行うなら。

参考(SP2): https://wiki.shibboleth.net/confluence/display/SHIB2/SLOWebappAdaptation

...


参考(SP3): https://wiki.shibboleth.net/confluence/display/SP3/Notify

注意

なお、SLOに対応したIdP/SPを運用している場合、SP証明書が署名用途で用いられる、およびIdP証明書が暗号化用途で用いられる可能性があるため、証明書の更新時にはより一層の注意を払っていただく必要があります。

注意

IdP 3.3.1より前のバージョンではIE / EdgeでのSLOに問題があることが分かっています。最新バージョンをお使いください。
参照: IdPv3アップデートに関する情報

注意

IdP 3.2.1時点では上記操作実行後Webブラウザが次のようなエラーメッセージを表示する画面へ遷移し、SPからのログアウトが実施されません。(IdPからはログアウトされています)

本件はIdP 3.3.0で修正されています。

参考: IDP-892IDP-956

--
Image Added


参考: