注册SecurityTokenReceived事件处理程序

本文关键字:程序 事件处理 SecurityTokenReceived 注册 | 更新日期: 2023-09-27 18:08:04

最近我开始在一个现有的web应用程序上使用基于声明的身份验证。一切都运行良好,但为了更好地处理SessionSecurity令牌的过期,我想采用滑动过期。

但是,我在为SecurityTokenReceived事件注册事件处理程序时遇到了麻烦。

我的处理程序方法在Global.asax.cs中定义如下:

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

但是当在同一个文件的Application_Start中注册这个处理程序方法时,像这样:

FederatedAuthentication.WSFederationAuthenticationModule.SecurityTokenReceived += SessionAuthenticationModule_SessionSecurityTokenReceived;

Visual Studio响应SessionAuthenticationModule_SessionSecurityTokenReceived不存在与委托System.EventHandler匹配的重载。

我在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上阅读了一些可用的文档,但我不明白为什么事件处理程序不被接受。有人能帮忙吗?

注册SecurityTokenReceived事件处理程序

FederatedAuthentication.WSFederationAuthenticationModule。SecurityTokenReceived期望方法与SecurityTokenReceivedEventArgs而不是SessionSecurityTokenReceivedEventArgs(如我的VS所说)。尝试将代码更改为:

protected void SessionAuthenticationModule_SessionSecurityTokenReceived(object sender, SecurityTokenReceivedEventArgs e)

多亏了Danila Polevshikov的回答,我才注意到自己的错误。解决方案如下:

在Application_Start方法中,事件处理程序应该是:
FederatedAuthentication.SessionAuthenticationModule.SessionSecurityTokenReceived += SessionAuthenticationModule_SessionSecurityTokenReceived;

我需要有SessionSecurityTokenReceivedArgs参数,因为我需要重新发出一个cookie