以下でご紹介しているExtendedフローはdeprecatedとなりShibboleth IdPバージョン5で削除される予定です。現行バージョンで当該機能を使っている方はMFAへの移行をご検討ください。
以下で4.1でもまだ有効な簡便な方法を説明していますが、3.3以降であればより汎用的で複雑な挙動が実現できるMFAによる方法もご参照ください。
Shibboleth IdP 3以降の高度な認証設定についてのドキュメントです。4.1以降で書式が大幅に変更になりましたのでそれに特化した記述になっております。本ドキュメントはSAML 2.0で認証の切り替えを行うことを目的としており、SAML1は対象外です(LevelXを用いた認証要求はできません)。
SAML1を使うことにより本設定の制約を迂回できることを避けるため、SPにおいてはshibboleth2.xmlにてSAML1の機能を無効化することをお勧めします。
本ドキュメントで使用する認証コンテクストと認証フローの関係を下記に示します。
ここでRemoteUserはパスワード認証とクライアント証明書認証の中間の強度の認証の例として挙げております。実際に運用する場合は別途用意した認証フローで置き換えてください。また、レベルとの対応付けも本ドキュメント独自のもので、例示として使用しています。
認証コンテクスト | 略称 | 認証フロー |
---|---|---|
urn:mace:gakunin.jp:idprivacy:ac:classes:Level1 | Level1 | Password |
urn:mace:gakunin.jp:idprivacy:ac:classes:Level2 | Level2 | RemoteUser |
urn:mace:gakunin.jp:idprivacy:ac:classes:Level3 | Level3 | X509 |
この認証コンテクストとは別に、PasswordやX509は固有の認証コンテクストを持っていますが、ここでは使用しません。
挙動の説明で使用するSPについて下記に示します。
SP | 要求する認証 |
---|---|
SPa | なし |
SPb | urn:mace:gakunin.jp:idprivacy:ac:classes:Level1 |
SPc | urn:mace:gakunin.jp:idprivacy:ac:classes:Level2 |
SPd | urn:mace:gakunin.jp:idprivacy:ac:classes:Level3 |
認証フローの階層化
設定
既に認証済みの認証フローを優先するために、
conf/authn/authn.properties
のidp.authn.favorSSO
をアンコメントしtrueに設定します。各認証フローの
supportedPrincipals
プロパティに下記を追加します。認証フロー supportedPrincipals
プロパティPassword
継承元の shibboleth.AuthenticationFlow
で定義されているsupportedPrincipals, Level1
RemoteUser
Level2, Level1
X509
Level3, Level2, Level1
conf/relying-party.xml
のshibboleth.DefaultRelyingParty
内のSAML2.SSO
にdefaultAuthenticationMethods
プロパティを設定します。必要であればRelyingPartyOverridesのほうのSAML2.SSOにも同様の設定を追加してください。
- この設定で問題がある場合、つまり許容されているレベルでもより高レベルの認証が求められる場合は、authn.propertiesの idp.authn.*.order を調整してください。より弱い認証のorderを小さい数にすれば、より高い優先度で表示されるようになります。
挙動
未認証の場合
- SPaもしくはSPbからIdPにリダイレクトされると、
Level1
のPassword認証フローのログインページが表示されます。 - SPcからIdPにリダイレクトされると、
Level2
のRemoteUser認証フローのためのログインページやダイアログが表示されます。 - SPdからIdPにリダイレクトされると、
Level3
のX509認証フローのログインページが表示されます。
Level1
が認証済みの場合
- SPaもしくはSPbからIdPにリダイレクトされると、
Level1
のPassword認証フローが認証済みのためユーザ同意画面もしくは認証後のSPの画面が表示されます。 - SPcからIdPにリダイレクトされると、
Level2
のRemoteUser認証フローのためのログインページやダイアログが表示されます。 - SPdからIdPにリダイレクトされると、
Level3
のX509認証フローのログインページが表示されます。
Level2
が認証済みの場合
- SPaもしくはSPbからIdPにリダイレクトされると、
Level2
のRemoteUser認証フローが認証済みのためユーザ同意画面もしくは認証後のSPの画面が表示されます。 - SPcからIdPにリダイレクトされると、
Level2
のRemoteUser認証フローが認証済みのためユーザ同意画面もしくはSPの画面が表示されます。 - SPdからIdPにリダイレクトされると、
Level3
のX509認証フローのログインページが表示されます。
Level3
が認証済みの場合
- SPaもしくはSPbからIdPにリダイレクトされると、
Level3
のX509認証フローが認証済みのためユーザ同意画面もしくは認証後のSPの画面が表示されます。 - SPcからIdPにリダイレクトされると、
Level3
のX509認証フローが認証済みのためユーザ同意画面もしくは認証後のSPの画面が表示されます。 - SPdからIdPにリダイレクトされると、
Level3
のX509認証フローが認証済みのためユーザ同意画面もしくは認証後のSPの画面が表示されます。
Password認証フローのExtendedフロー
設定
認証フローの階層化の設定を行ってください。
conf/authn/authn.properties
のauthn/Password
にExtendedフローで利用するLevel2, Level3
を追加します。conf/authn/password-authn-config.xml
でExtendedフローのbean
をアンコメントし、下記の設定を行います。もし当該ファイルにこの部分が存在しなければ、最終行の1つ上にこの部分を挿入してください。shibboleth.authn.Password.ExtendedFlows
のc:_0に、ExtendedフローとするRemoteUser
とX509
を設定します。shibboleth.authn.Password.PrincipalOverride
に、Password認証フローで認証するLevel1
を追加します。Level2
やLevel3
を除いているところがポイントです。
Shibboleth IdP 4.1および4.2にはバグがありますので手動でaddDefaultPrincipalsをfalseにしてください。
Shibboleth IdP 4.0.0および4.0.1をお使いの場合および以降のバージョンでも以前のバージョンからアップデートしている場合は、login.vmにバグがあり追加のボタンが表示されませんので、以下の修正を行ってください。
挙動
各SPからIdPにリダイレクトされた時に表示されるPassword認証フローのログインページを下記に示します。
SPaおよびSPbからの場合
Password認証フローのための「Username」と「Passowrd」のフォームと「Login」ボタン、およびExtendedフローであるRemoteUser認証フローとX509認証フローのためのボタン「RemoteUser」と「X509」が表示されます。「Login」とボタンの形状が同じで紛らわしいですが、Extendedフローを利用する場合は上部のフォーム(「Username」と「Passowrd」)の入力は不要です。
図1. SPaおよびSPbからの場合
- SPcからの場合
ExtendedフローであるRemoteUser認証フローとX509認証フローのためのボタン「RemoteUser」と「X509」が表示されます。Level1
のPassword認証フローは表示されません。図2. SPcからの場合
- SPdからの場合
ExtendedフローのうちLevel3
以上であるX509認証フローのためのボタン「X509」が表示されます。Level1
のPassword認証フロー、およびLevel2
のX509認証フローは表示されません。図3. SPdからの場合
参考
高度な認証フローを設定する上で、参考になるドキュメントを下記に示します。
- [Shibboleth wiki] AuthenticationConfiguration
- [Shibboleth wiki] AuthenticationFlowSelection
- [Shibboleth wiki] PasswordAuthnConfiguration|ExtendedFlows
の"Extended Flows" - [Shibboleth wiki] Orchestrating Multiple Authentication Methods and Contexts - The Multi-Context Broker (MCB)
- [Shibboleth wiki] Configuring the IdP for the Multi-Context Broker Model
- [Shibboleth wiki] Replicating Multi-Context Broker Functionality (Duo + Username/Password with user-opt-in forcing Duo)
- [Shibboleth wiki] SP-driven Duo opt-in
(リンク先にsystem/以下のファイルを編集している箇所がありますが推奨されていません) - 3.3向け
[Shibboleth wiki] MultiFactorAuthnConfiguration