1

Shibboleth SP (最新バージョン - 2.4.2) を使用して Shibbolized した Rails アプリがあります。Apache 2.2 で使用しています。私の IdP は MS AD FS 2.0 サーバーです。

ユーザーはサイトにアクセスし、AD FS にリダイレクトされ、認証されてから戻ってきて、サイトにログインします。

問題は、いったんそれを行うと、別のユーザーとしてタイムリーにログインすることがほとんど不可能になることです。すべての Cookie をクリアして (Mac の Safari と Chrome で試しています)、ブラウザを再起動できますが、最初に Alice として認証されてから Carol としてログインしようとすると、アプリケーションにログインしたままになります。アリスとして。

Cookie をクリアした後に shibd が受信した SAML 応答には、正しい ID が含まれています。

<AttributeStatement>
  <Attribute Name="http://schemas.xmlsoap.org/claims/CommonName">
    <AttributeValue>Carol</AttributeValue>
  </Attribute>
  <Attribute Name="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress">
    <AttributeValue>carol@dev.REDACTED.com</AttributeValue>
  </Attribute>
  <Attribute Name="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/upn">
    <AttributeValue>carol@dev.REDACTED.com</AttributeValue>
  </Attribute>
</AttributeStatement>

しかし、Shibboleth SP が環境変数をアプリに渡すと、代わりに間違った資格情報が送信されます。

[DEBUG 05/19 16:30:09]   ENV:  Shib-Session-ID => _615014991ed1b7dcc43f647ceb1f4944
[DEBUG 05/19 16:30:09]   ENV:  Shib-Identity-Provider => http://REDACTED/adfs/services/trust
[DEBUG 05/19 16:30:09]   ENV:  Shib-Authentication-Instant => 2011-05-19T21:17:23.861Z
[DEBUG 05/19 16:30:09]   ENV:  Shib-Authentication-Method => urn:federation:authentication:windows
[DEBUG 05/19 16:30:09]   ENV:  Shib-AuthnContext-Class => urn:federation:authentication:windows
[DEBUG 05/19 16:30:09]   ENV:  Shib-Session-Index => _cadfb4e6-ffb2-45f9-aab5-6bce8c3bc17a
[DEBUG 05/19 16:30:09]   ENV:  cn => alice
[DEBUG 05/19 16:30:09]   ENV:  email => alice@dev.REDACTED.com
[DEBUG 05/19 16:30:09]   ENV:  principal => alice@dev.READACTED.com

すべての Cookie を破棄しても、Shib-Session-ID は同じになります。どういうわけか、SAML 応答からのアカウント情報で新しいセッションを作成するのではなく、2 つのやり取りを関連付けて既存のセッションを再確立しているようです。

見つけることができるすべてのキャッシュ タイムアウト値を 60 秒に設定しましたが、ブラウザーを閉じた状態で 2 ~ 3 分待つだけでは、新しいセッションを作成するのに十分ではありません。

<StorageService type="Memory" id="mem" cleanupInterval="60"/>
<SessionCache type="StorageService" StorageService="mem" cacheTimeout="60" 
   inprocTimeout="60" cleanupInterval="60" />

...

<Sessions lifetime="60" timeout="60" checkAddress="false" relayState="ss:mem"
    handlerSSL="false">

apache と shibd を再起動すると、ブラウザーを閉じて長時間 (10 ~ 15 分?) 放置しても機能します。

私は何が欠けていますか?他にどのような手段を追求する必要がありますか?

4

1 に答える 1

1

重要なのは、アプリが Rails アプリであり、Passenger を使用してデプロイされていることです。最初の呼び出しの後、Passenger が環境変数を更新していないように見えるため、古いデータになってしまう可能性があります。

ヘッダーを介してユーザー情報を渡すように切り替える (ShibUseHeaders をオンにする) と、問題が解決しました。

于 2011-05-20T21:40:09.553 に答える