如何在使用STS(WIF)进行身份验证的MVC应用程序中设置滑动过期

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登录,因此任何令牌收到的事件都应该被解雇.

任何有关如何做到这一点的帮助将不胜感激.谢谢!

bme*_*ith 8

由于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