Events 如何处理Global.asax中接收到的事件sessionsecuritytoken?
我试图在WIF中设置滑动会话,需要处理 我肯定我在做些傻事。。。但是VS2010不断地告诉我,在下图中没有适用的变量或成员。谁能给我指出正确的方向吗?我到处寻找如何定义此事件处理的实际示例,但找不到一个 Global.asaxEvents 如何处理Global.asax中接收到的事件sessionsecuritytoken?,events,global-asax,wif,windows-identity,Events,Global Asax,Wif,Windows Identity,我试图在WIF中设置滑动会话,需要处理 我肯定我在做些傻事。。。但是VS2010不断地告诉我,在下图中没有适用的变量或成员。谁能给我指出正确的方向吗?我到处寻找如何定义此事件处理的实际示例,但找不到一个 Global.asax protected void Application_Start() { FederatedAuthentication.WSFederationAuthenticationModule.SecurityTokenReceived +=
protected void Application_Start()
{
FederatedAuthentication.WSFederationAuthenticationModule.SecurityTokenReceived
+= SessionAuthenticationModule_SessionSecurityTokenReceived;
// ^^^ There is no applicable variable or member
}
void SessionAuthenticationModule_SessionSecurityTokenReceived(object sender, SessionSecurityTokenReceivedEventArgs e)
{
DateTime now = DateTime.UtcNow;
DateTime validFrom = e.SessionToken.ValidFrom;
DateTime validTo = e.SessionToken.ValidTo;
if ((now < validTo) &&
(now > validFrom.AddMinutes((validTo.Minute - validFrom.Minute) / 2))
)
{
SessionAuthenticationModule sam = sender as SessionAuthenticationModule;
e.SessionToken = sam.CreateSessionSecurityToken(
e.SessionToken.ClaimsPrincipal,
e.SessionToken.Context,
now,
now.AddMinutes(2),
e.SessionToken.IsPersistent);
e.ReissueCookie = true;
}
else
{
//todo: WSFederationHelper.Instance.PassiveSignOutWhenExpired(e.SessionToken, this.Request.Url);
// this code from: http://stackoverflow.com/questions/5821351/how-to-set-sliding-expiration-in-my-mvc-app-that-uses-sts-wif-for-authenticati
var sessionAuthenticationModule = (SessionAuthenticationModule)sender;
sessionAuthenticationModule.DeleteSessionTokenCookie();
e.Cancel = true;
}
}
受保护的无效应用程序\u Start()
{
FederatedAuthentication.WSFederationAuthenticationModule.SecurityTokenReceived
+=SessionAuthenticationModule_SessionSecurityTokenReceived;
//^^^没有适用的变量或成员
}
作废SessionAuthenticationModule_SessionSecurityTokenReceived(对象发送方,SessionSecurityTokenReceivedEventArgs e)
{
DateTime now=DateTime.UtcNow;
DateTime validFrom=e.SessionToken.validFrom;
DateTime validTo=e.SessionToken.validTo;
如果((现在validFrom.AddMinutes((validTo.Minute-validFrom.Minute)/2))
)
{
SessionAuthenticationModule sam=发送方作为SessionAuthenticationModule;
e、 SessionToken=sam.CreateSessionSecurityToken(
e、 SessionToken.ClaimsPrincipal,
e、 SessionToken.Context,
现在,
现在,添加分钟(2),
e、 SessionToken.IsPersistent);
e、 ReissueCookie=true;
}
其他的
{
//todo:WSFederationHelper.Instance.PassivesInOutwhenExpired(e.SessionToken,this.Request.Url);
//此代码来自:http://stackoverflow.com/questions/5821351/how-to-set-sliding-expiration-in-my-mvc-app-that-uses-sts-wif-for-authenticati
var sessionAuthenticationModule=(sessionAuthenticationModule)发送方;
sessionAuthenticationModule.DeleteSessionTokenCookie();
e、 取消=真;
}
}
我认为您不需要订阅活动。在开始时删除子说明并仅使用
SessionAuthenticationModule\u SessionSecurityTokenReceived
ASP.Net将为您连接这些内容。(模块必须命名为“SessionAuthenticationModule”,默认情况下为)
如果您正在处理滑动会话,Vittorio的这篇博文非常好:与其在Global.asax中定义它,不如创建一个继承SessionAuthenticationModule的新类:
public class CustomAuthenticationModule : SessionAuthenticationModule
{
public CustomAuthenticationModule()
{
this.SessionSecurityTokenReceived += new EventHandler<SessionSecurityTokenReceivedEventArgs>(CustomAuthenticationModule_SessionSecurityTokenReceived);
}
void CustomAuthenticationModule_SessionSecurityTokenReceived(object sender, SessionSecurityTokenReceivedEventArgs e)
{
// Your code
}
}
公共类CustomAuthenticationModule:SessionAuthenticationModule
{
公共CustomAuthenticationModule()
{
this.SessionSecurityTokenReceived+=新事件处理程序(CustomAuthenticationModule_SessionSecurityTokenReceived);
}
void CustomAuthenticationModule_SessionSecurityTokenReceived(对象发送方,SessionSecurityTokenReceivedEventArgs e)
{
//你的代码
}
}
然后在web.config中,用新模块替换默认的SessionAuthentication模块:
<modules>
<add name="SessionAuthenticationModule" type="CustomAuthenticationModule" preCondition="managedHandler"/>
</modules>
简单,工作起来很有魅力!我如何区分需要连接的事件和不需要连接的事件呢?谢谢,我最近一直在努力进行一些配置,这节省了我的时间(我没有一个全局页面),虽然它在global.asax中并不特别,可能应该在其他线程中,但我在别处找不到这段信息。