Shibboleth IdP administrative logoutを試してみた

logo of shibboleth

こんにちは。サイオステクノロジーの服部です。

Shibboleth IdP 4.3で追加された機能であるadministrative logoutを試してみたので、簡単にまとめます。

administrative logoutは、アカウント侵害が確認された際などに、特定時刻以前の既存IdPセッションを失効させるための機能です。

LDAPに格納されたパスワードを変更した場合に、IdPセッションが残っていると、変更後のパスワードを入力することなくSPにログインすることができてしまいます。administrative logoutを使用することで、既存IdPセッションを失効させ、ログイン画面へ遷移させることができます。

設定

administrative logoutにはAttributeベースの失効と、StorageServiceベースの失効の2種がありますが、今回はAttributeベースの失効をLDAPにデータを格納して試してみます。
※StorageServiceベースの失効では、RESTインターフェースを通じて失効情報を確認、変更することができます。

以下、Shibbolethのデフォルト設定からの変更点を記載します。

Shibboleth IdPインストールディレクトリ配下「conf/authn/authn.properties」を以下のように書き換えます。

# Revocation (administrative logout)
#idp.authn.revocation = false
⇒ idp.authn.revocation = true

# Default implementation based on a StorageService bean.
#idp.authn.revocation.StorageService = shibboleth.StorageService
⇒ idp.authn.revocation.StorageService = shibboleth.AttributeRevocationCondition

同ファイルに「idp.auth.revocation.attributeId」を設定することで、使用する属性を指定することができますが、今回は特に指定せずデフォルトの「revocation」を使用します。

idp.authn.revocation.attributeId = CustomAttr

「conf/authn/attribute-filter.xml」にLDAPから「revocation」を取得する設定を追加します。

・・・前略・・・
<DataConnector id="myLDAP" xsi:type="LDAPDirectory"
・・・中略・・・
exportAttributes="... revocation">
・・・中略・・・
<Column columnName="testAttr01" attributeID="revocation" />
</DataConnector>
・・・後略・・・

動作確認

学認フェデレーションのSAML2属性表示サービス(テストSP2)を使用して挙動を試してみます。

administrative logoutなし

まずは、revocationを設定しない場合の挙動を確認します。

SPからログアウトした後もIdP側のセッションが維持されているため、パスワードを確認されることなく再度SPにログインすることができます。

 

また、LDAP側でパスワードを変更しても、既存のIdPセッションが有効な間は、SPのログイン時にパスワードの確認が行われません。

 

administrative logoutあり

次に、revocationを設定した際の挙動を確認します。

先ほどの例と同様にLDAP上でパスワード変更を行いますが、その際にrevocationを設定します。

revocationに設定した時間より前のセッションが失効扱いとなるため、今回はパスワード変更を行った時刻を設定しています。
※時刻は秒単位のunixtimeで設定する必要があります。

パスワード変更後にSPにログインを行おうとするとIdPセッションが失効しているため、
パスワードの確認画面が表示され。

まとめ

administrative logoutを使用することで、LDAP側のパスワード変更などのタイミングで、
IdPセッションをログアウト(実際には失効)することができるようになります。

今回はパフォーマンスへの影響は調査できていませんが、問題ないようなら、
LDAPパスワード変更時にrevocationを設定するようにするのもいいかもしれないですね。

参考ページ

ご覧いただきありがとうございます! この投稿はお役に立ちましたか?

役に立った 役に立たなかった

0人がこの投稿は役に立ったと言っています。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です