ric*_*b01 4 c# security model-view-controller
我们正在使用STS开发MVC应用程序.我们使用WIF工具创建一个简单的STS应用程序进行开发.
我希望能够在我的令牌中设置一个滑动过期(在RP中).
我看到这里的代码.
不幸的是,这是事件处理程序和示例,虽然有用,但没有显示如何实现处理程序!
在我的global.asax,Application_Start()我有:
sam = new SessionAuthenticationModule();
sam.SessionSecurityTokenReceived +=
new EventHandler<SessionSecurityTokenReceivedEventArgs>(sam_SessionSecurityTokenReceived);
Run Code Online (Sandbox Code Playgroud)
(sam是用类范围定义的.)
我不确定这是否正确.我不知道如何验证是否因为global.asax中的调试问题而调用了该事件.
是否有更完整的例子来说明如何捕获此事件?我是以正确的方式去做的吗?
TIA!我很感激帮助!丰富
编辑 - 好吧,我知道事件没有被调用,因为我在处理程序中除了零代码而应用程序没有抛出异常.我通过我的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;
}
}
Run Code Online (Sandbox Code Playgroud)
来源:http://blogs.planbsoftware.co.nz/?p = 521 1
| 归档时间: |
|
| 查看次数: |
2694 次 |
| 最近记录: |