Shibboleth IdPでの認証において、Google Authenticatorなど、TOTPに対応したデバイス/アプリのワンタイムパスワードを追加で必要とするように変更します。
動作確認にはTOTPに対応したデバイスもしくはアプリが必要です。
本ページで紹介したプラグインのより新しいバージョン(fork)が以下で公開されております。v3.4に対応しMFAログインフローと組み合わせられますので、こちらの利用もご検討ください。 |
本IdPプラグインの添付されたバージョンでは登録できるデバイスの数を1個のみに制限し二要素認証としての効力を確保するものとなります。登録手続きにはIPアドレス等による制限はかかりません。 このままでの運用に不都合がある場合は、登録手続きにアクセス制限をかけた上で個数制限を緩和することをご検討ください。 |
本TotpフローをExtendedフローの中で使用しようとしてもうまくいきません(Totpを選択してもID・パスワード欄が表示されません)。認証フローを組み合わせたい場合はMFAフローをご検討ください。 |
ldap.propertiesにLDAPの情報が記述されていると思いますが、LDAPのbindDNの権限で読み込みに加えて書き込みもできることを確認しておいてください。seedの保存をLDAPに対して行います。 |
以下の手順で作業を進めてください。
添付の totpauth-impl-0.5.1oncepatch-bin.zip をマシンにダウンロード、展開。(参考まで、添付のパッケージとオリジナルの差分はこちら)
conf/, edit-webapp/, flows/, views/ の内容をディレクトリ構造を保持したまま/opt/shibboleth-idp/以下に配置。
idp.propertiesのidp.authn.flowsに"|Totp"を追加。
-idp.authn.flows = Password +idp.authn.flows = Password|Totp |
conf/authn/general-authn.xmlの <util:list id="shibboleth.AvailableAuthenticationFlows">
の子要素として以下を挿入します。TOTPの優先順位を高くするためには先頭に挿入してください。
<bean id="authn/Totp" parent="shibboleth.AuthenticationFlow" p:passiveAuthenticationSupported="true" p:forcedAuthenticationSupported="true"> <property name="supportedPrincipals"> <util:list> <bean parent="shibboleth.SAML2AuthnContextClassRef" c:classRef="urn:oasis:names:tc:SAML:2.0:ac:classes:TimeSyncToken" /> </util:list> </property> </bean> |
conf/authn/password-authn-config.xmlにパスワードを持ち回る必要があるため以下の行を追加します。
@@ -23,6 +23,8 @@ <bean id="shibboleth.authn.Password.PasswordFieldName" class="java.lang.String" c:_0="j_password" /> <bean id="shibboleth.authn.Password.SSOBypassFieldName" class="java.lang.String" c:_0="donotcache" /> + <util:constant id="shibboleth.authn.Password.RemoveAfterValidation" static-field="java.lang.Boolean.FALSE"/> + <!-- Simple transforms to apply to username before validation. --> <util:constant id="shibboleth.authn.Password.Lowercase" static-field="java.lang.Boolean.FALSE"/> <util:constant id="shibboleth.authn.Password.Uppercase" static-field="java.lang.Boolean.FALSE"/> |
/opt/shibboleth-idp/bin/build.shを実行し、WARファイル再作成およびデプロイします。
最後にJettyの再起動を行います。
|
以下は、利用するTOTPプラグインの開発元のURLです。詳細にご興味がある方はご参照ください。
Shibboleth IdPバージョン3.2対応のものであるため、4以降で実行するためには上記のパッケージおよび手順が必要となります。
参考: https://github.com/korteke/Shibboleth-IdP3-TOTP-Auth
以下が登録手順です。
Username/Passwordを
入力して次に進みます。以下が動作確認手順です。
Username/Passwordを
入力して次に進みます。ページ下部の「セッション情報」をクリックして、以下のように認証手段がパスワード認証時と異なることを確認してください。
|