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