1

最近、既存の Web アプリケーションでクレームベース認証を使い始めました。すべてがうまく機能しますが、SessionSecurity トークンの有効期限をより適切に処理するために、スライド有効期限を採用したいと考えています。

ただし、SecurityTokenReceived イベントのイベント ハンドラーを登録するのに問題があります。

私のハンドラー メソッドは、Global.asax.cs で次のように定義されています。

protected void SessionAuthenticationModule_SessionSecurityTokenReceived(object sender, SessionSecurityTokenReceivedEventArgs e) { ... }

しかし、このハンドラ メソッドを同じファイルの Application_Start に登録すると、次のようになります。

FederatedAuthentication.WSFederationAuthenticationModule.SecurityTokenReceived += SessionAuthenticationModule_SessionSecurityTokenReceived;

Visual Studio は、デリゲート System.EventHandler に一致する SessionAuthenticationModule_SessionSecurityTokenReceived のオーバーロードが存在しないことを応答します。

web.config のセクションに次の設定があります。

<securityTokenHandlers>
    <add type="Microsoft.IdentityModel.Tokens.SessionSecurityTokenHandler, Microsoft.IdentityModel, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
      <sessionTokenRequirement lifetime="0:02" />
    </add>
  </securityTokenHandlers>

MSDN で入手可能なドキュメントをいくつか読みましたが、イベント ハンドラーが受け入れられない理由がわかりません。誰でも助けてもらえますか?

4

2 に答える 2

3

FederatedAuthentication.WSFederationAuthenticationModule.SecurityTokenReceived は、SessionSecurityTokenReceivedEventArgs の代わりにSecurityTokenReceivedEventArgsを使用したメソッドを期待しています (私の VS が言うように)。コードを次のように変更してみてください。

protected void SessionAuthenticationModule_SessionSecurityTokenReceived(object sender, SecurityTokenReceivedEventArgs e)
于 2013-04-08T10:25:57.650 に答える
3

Danila Polevshikov の回答のおかげで、自分の間違いに気付きました。解決策は次のとおりです。

Application_Start メソッドでは、イベント ハンドラーは次のようになっている必要があります。

FederatedAuthentication.SessionAuthenticationModule.SessionSecurityTokenReceived += SessionAuthenticationModule_SessionSecurityTokenReceived;

Cookie を再発行する必要があるため、SessionSecurityTokenReceivedArgs 引数が必要です。

于 2013-04-08T12:06:53.420 に答える