我们正在使用 STS 开发一个 MVC 应用程序。我们使用 WIF 工具创建了一个简单的 STS 应用程序进行开发。
我希望能够在我的令牌(在 RP 中)中设置滑动到期时间。
我看到代码像这儿 http://social.msdn.microsoft.com/Forums/en/Geneva/thread/a048694c-3548-4b4d-9bb3-0589c888fd02.
不幸的是,这是事件处理程序,该示例虽然有帮助,但没有显示如何实现该处理程序!
在我的 global.asax 中,Application_Start() 我有:
sam = new SessionAuthenticationModule();
sam.SessionSecurityTokenReceived +=
new EventHandler<SessionSecurityTokenReceivedEventArgs>(sam_SessionSecurityTokenReceived);
(sam 是用类范围定义的。)
我不确定这是否正确。由于 global.asax 中的调试问题,我不知道如何验证该事件是否被调用过。
是否有更完整的示例来说明如何捕获此事件?我以正确的方式处理这件事吗?
蒂亚!我很感激你的帮助!
富有的
编辑 - 好吧,我知道该事件没有被调用,因为我在处理程序中放置了除以零的代码,并且应用程序没有抛出异常。我通过 STS 登录,因此任何收到的令牌事件都应该被触发。
任何有关如何执行此操作的帮助将不胜感激。谢谢!
由于 WIF 仅允许固定长度的会话,因此需要重新颁发安全令牌,此时您可以将令牌的 IsValidTo 属性设置为您需要的任何值。
将其放入您的 global.asax 文件中:
protected void SessionAuthenticationModule_SessionSecurityTokenReceived(object sender, SessionSecurityTokenReceivedEventArgs e)
{
var sessionToken = e.SessionToken;
SymmetricSecurityKey symmetricSecurityKey = null;
if (sessionToken.SecurityKeys != null)
symmetricSecurityKey = sessionToken.SecurityKeys.OfType<SymmetricSecurityKey>().FirstOrDefault();
Condition.Requires(symmetricSecurityKey, "symmetricSecurityKey").IsNotNull();
if (sessionToken.ValidTo > DateTime.UtcNow)
{
var slidingExpiration = sessionToken.ValidTo - sessionToken.ValidFrom;
e.SessionToken = new SessionSecurityToken(
sessionToken.ClaimsPrincipal,
sessionToken.ContextId,
sessionToken.Context,
sessionToken.EndpointId,
slidingExpiration,
symmetricSecurityKey);
e.ReissueCookie = true;
}
else
{
var sessionAuthenticationModule = (SessionAuthenticationModule) sender;
sessionAuthenticationModule.DeleteSessionTokenCookie();
e.Cancel = true;
}
}
Source: http://blogs.planbsoftware.co.nz/?p=521 http://blogs.planbsoftware.co.nz/?p=5211 http://blogs.planbsoftware.co.nz/?p=521
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)