2013年12月22日日曜日

SAML 2.0 Single Logout

SAML2.0規約で規定するシングルログアウトについて勉強する。

下図で示すように、複数のSP(Service Provider)とIdP間でシングルサインオンした場合、ログアウト時には、すべてのSP/IdPとクライアントとの間で確立した認証セッションを安全に終了させることが重要となる。SAML2.0仕様では、この仕組みを規定している。



 

SAML2.0仕様では、大きく以下の2種類のシングルログアウトの方法を規定する。
  • SP Initiated
    SPがシングルログアウトの起点になる方法。
    たとえば、利用者はSP Aの業務アプリケーションを利用中であり、ログアウトボタンを押す。まず、SP AからIdPにシングルログアウト要求を出す。IdPでは利用者とのセッションを終了させた後、現在利用者とセッションを確立中であるSP Bに対してシングルログアウト要求を出す。
  • IdP Initiated
    IdPがシングルログアウトの起点になる方法。
    たとえば、利用者はIdPを利用中であり、ログアウトボタンを押す。IdPでは、現在利用者とセッションを確立中であるSP AおよびSP Bに対してシングルログアウト要求を出す。


上記の2種類のシングルログアウトでは、IdPにおいて、どのSPが利用者との認証セッションを確立しているのかを管理することが必要となる。SAMLでは、Session Indexという識別子を用いて実現する。
IdPでは、シングルサインオン時にSPに対して認証アサーションを発行する。このとき、認証アサーションには、Session Indexも含めて発行する。SPでは、IdPから受信した認証アサーション内のSession Indexと、利用者とのローカルセッションのマッピング情報を管理する。
シングルログアウト時には、Session Indexを設定することにより、どのセッションを終了させたいのかを指定することが可能となる。

■シングルログアウトのメッセージ例
※<SessionIndex>要素の値としてSession Indexを指定してシングルログアウト要求を出す。
<samlp:LogoutRequest  xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol" ID="s239dcd741931119aa038e59df6b080c4b8581faae" Version="2.0" IssueInstant="2012-01-07T14:03:15Z" Destination="http://openam.yasuyasu.com:38080/openam/IDPSloRedirect/metaAlias/idp"><saml:Issuer xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion">http://openam.yasuyasu.com:28080/openam</saml:Issuer><saml:NameID xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion" NameQualifier="http://openam.yasuyasu.com:38080/openam" SPNameQualifier="http://openam.yasuyasu.com:28080/openam" Format="urn:oasis:names:tc:SAML:2.0:nameid-format:persistent">fdnShhUunBzV4YXtq4U+i8/c+IG6</saml:NameID>
<samlp:SessionIndex xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol">
s22d9e5d52b4a97720268e30cc09e02257f42c5d01
</samlp:SessionIndex>
</samlp:LogoutRequest>

0 件のコメント: