[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[upki-fed:00796] Re: Filter Per SP (FPSP) の動作に関する質問
- Subject: [upki-fed:00796] Re: Filter Per SP (FPSP) の動作に関する質問
- Date: Mon, 24 Mar 2014 13:11:06 +0900
- From: Tatsumi Hosokawa <xxxxxxxx@xxxxxxxxxxxxxx>
オープンソース・ソリューション・テクノロジ 相本様
慶應義塾ITC本部の細川です。
貴重な情報有り難うございます。パッチを適用してみたところ、問題なくログインが可能となりました。
ところで一方、送信拒否時のerror.jspの呼び出しでエラー原因が表示されなくなってしまいました。
該当の処理を行っていたdoError()の代わりにhttpServletResponse.sendRedirect()になっているので、
その通りに動作しているのだと思いますが、これは何か理由があるのでしょうか?
# たとえば、単にHttpServletHelper.unbindLoginContext()の後に、
# doError()を呼び出したりするわけにはいかないのでしょうか?
よろしくお願いします。
細川
(2014/03/24 11:52), AIMOTO Norihito wrote:
> オープンソース・ソリューション・テクノロジ 相本 と申します。
>
> これは FPSP のバグだと考えています。
>
> 【原因】
> filter条件が、/profile/* ですがこれは各SPからのSAML Request時にも動作し
> ます。
> このとき、SPのEntityIDなどを保持しているセッション(_idp_authn_lc_key)が
> 前回の
> アクセス時のまま残っているため、以前のSPへのEntityIDへのアクセスとして
> FPSPが判定してしまいます。
>
> 【対策】
> FPSPで"拒否"した際に_idp_authn_lc_keyを破棄することで事象を解消できます。
> 下記のようなコードを入れることで本事象を解消できることを確認しました。
> HttpServletHelper.unbindLoginContext(
> HttpServletHelper.getStorageService(m_servletContext),
> m_servletContext, httpServletRequest, httpServletResponse);
>
> 【補足】
> 私が確認した限りですが、本来拒否されなければならないユーザーが許可となる
> という事象は発生しません。
> 認証済みの状態でも、「(1) /idp/profile/SAML2/Redirect/SSO(SAMLリクエス
> ト)」 → 「(2) /idp/AuthnEngine」 → 「(3) /idp/profile/SAML2/Redirect
> /SSO(SAMLレスポンス)」と
> 遷移し、(1)のfilter(FPSP)では以前のEntityIDで判定されますが、
> このアクセスでSAMLリクエストを解析された結果がセッション
> (_idp_authn_lc_key)に入り再発行されるため
> (3)のアクセス時には(1)のSAMLリクエストの内容でFPSPは判定します。
> よって「前回が許可」、「今回か拒否」のパターンでは
> 前回の内容で判定されることはありませんでした。
>
>
> この事象とは別に FPSP を利用していて、もう1件バグと思われる事象が
> ありましたので合わせて報告します。
>
> 【事象】
> FPSPで定義されたいるSPにアクセスして、Shibboleth IdPのログイン画面を表示後
> Shibboleth IdPにログインしなかった場合、以降どのSPでもFPSPで拒否となる。
>
> 【再現手順】
> あるSPへアクセスし、Shibboleth IdPのログイン画面が表示された後
> ログインせずに別のSPへアクセスし、ログインを試みようとするもFPSPで拒否さ
> れる。
>
> 【原因】
> Shibboleth IdPにログインされていない状態でも FPSP が動作してしまう。
>
> 【対策】
> FPSPはShibboleth IdPに未ログイン状態では動作しないようにします。
> 下記のようなコードを入れることで本事象を解消できることを確認しました。
> if (!loginCtx.isPrincipalAuthenticated()) {
> // まだログインしていない場合はログイン処理へ
> filterChain.doFilter(servletRequest, servletResponse);
> return;
> }
>
> この2件に関してのパッチを添付致します。
> 参考にしていただければと思います。
>
> 以上、よろしくお願い致します。
>
>
> (2014年03月24日 10:22), Tatsumi Hosokawa wrote:
>> 慶應義塾ITC本部の細川です。
>>
>> 現在、
>>
>> https://meatwiki.nii.ac.jp/confluence/pages/viewpage.action?pageId=12158554
>>
>> のFilter Per SP (FPSP)をテストしており、一応動作はするようになったのですが、
>> これで属性送信を一旦拒否された場合、それ以降その他のSPにSSOする際も、
>> 全て拒否されるようになってしまっています。
>>
>> ブラウザを再起動すればまた他サービスにはログインできるのですが、
>> これはそのような仕様なのでしょうか?
>>
>> 現在のSampleFilterPerSP_allow.xmlの内容は、
>>
>> <?xml version="1.0" encoding="UTF-8"?>
>> <!DOCTYPE EntitiesDescriptor [
>> <!ELEMENT EntitiesDescriptor (EntityDescriptor+)>
>> <!ELEMENT EntityDescriptor (Attribute+)>
>> <!ELEMENT Attribute (#PCDATA)>
>>
>> <!ATTLIST EntityDescriptor entityID CDATA #REQUIRED>
>> <!ATTLIST Attribute attributeID CDATA #REQUIRED>
>> ]>
>>
>> <EntitiesDescriptor>
>> <EntityDescriptor entityID="https://testsp1.itc.keio.ac.jp/shibboleth-sp">
>> <Attribute attributeID="eduPersonAffiliation">
>> student
>> </Attribute>
>> </EntityDescriptor>
>> </EntitiesDescriptor>
>>
>> となっており、 https://testsp1.itc.keio.ac.jp/ へのログインは、
>> 私のeduPersonAffiliationがstaff;memberなので拒絶されます。
>>
>> ここまではいいのですが、その後他のSPに接続する際も、
>>
>> Deny you(xxxxxxxx@xxxxxxxxxx) login to Service Provider https://testsp1.itc.keio.ac.jp/shibboleth-sp
>>
>> のメッセージがブラウザに表示され、拒絶されてしまいます。
>> ここで、testsp1.itc.keio.ac.jpにアクセスする前であれば、
>> 他のサービスにも問題なくログインできます。
>>
>>
>> idp-process.logには何も表示されないのですが、catalina.outには次のようなエラーが出ます。
>>
>> 1. まず最初に https://testsp1.itc.keio.ac.jp にアクセスした時
>>
>> SampleFilterPerSP spEntityId = https://testsp1.itc.keio.ac.jp/shibboleth-sp
>> SampleFilterPerSP don't match any attributes.
>> SampleFilterPerSP eduPersonAffiliation=member
>> SampleFilterPerSP eduPersonAffiliation=staff
>> SampleFilterPerSP eduPersonPrincipalName=xxxxxxxxxxx@xxxxxxxxxx
>> SampleFilterPerSP transientId=xxxxxxxxxxxx
>>
>> 2. その後 https://security-learning.nii.ac.jp にアクセスした時
>>
>> SampleFilterPerSP spEntityId = https://testsp1.itc.keio.ac.jp/shibboleth-sp
>> SampleFilterPerSP don't match any attributes.
>> SampleFilterPerSP eduPersonAffiliation=member
>> SampleFilterPerSP eduPersonAffiliation=staff
>> SampleFilterPerSP eduPersonPrincipalName=xxxxxxxxxxx@xxxxxxxxxx
>> SampleFilterPerSP transientId=xxxxxxxxxxxx
>>
>> 3. ブラウザを再起動して https://security-learning.nii.ac.jp にアクセスした時(問題なくログインできます)
>> SampleFilterPerSP spEntityId = https://security-learning.nii.ac.jp/shibboleth-sp
>> SampleFilterPerSP spEntityId = https://security-learning.nii.ac.jp/shibboleth-sp
>>
>>
>> 1,2のエラーは全く同一です。このような状況なのですが、どなたかFPSPを利用されている方、
>> これが異常な動作なのかどうか教えていただけますでしょうか?
>>
>> よろしくお願いします。
>>
>
--
慶應義塾ITC本部 細川達己 xxxxxxxx@xxxxxxxxxxxxxx
Tel. 03-5427-1685 Fax. 03-5427-1722