身份声明超时

时间:2018-06-06 07:40:42

标签: c# asp.net-mvc authentication asp.net-identity

我有一个使用Azure B2C身份验证的ASP.Net MVC应用程序,以及用于授权用户访问应用程序部分的身份角色。但是,有一个问题是,大约一个小时后,角色似乎超时了。我目前的理论是,由于它使用cookie身份验证,因此cookie即将到期,因此该角色将被撤销。

配置此代码的代码如下:

public void ConfigureAuth(IAppBuilder app)
{
    app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType);

    app.UseCookieAuthentication(new CookieAuthenticationOptions
    {
        CookieManager = new SystemWebCookieManager(),
        SlidingExpiration = true
    });

    app.UseOpenIdConnectAuthentication( ...

请注意,此处未设置ExpireTimeSpan。声明在此处添加:

public class MvcApplication : HttpApplication
{
    void Application_PostAuthenticateRequest()
    {
        ...

        if (Request.IsAuthenticated)
        {
            var identity = ClaimsPrincipal.Current.Identities.First();

            var myClaim = new Claim("Role", "admin");                
            identity.AddClaim(myClaim);
            ...

超时后,ClaimsPrincipal.Current.Claims为空;所以我要添加的自定义声明以及MS发出的声明(例如nameidentifier)。如何清除它,以及设置(假设它是一个设置)告诉何时清除?

1 个答案:

答案 0 :(得分:0)

我想问题出在设置

UseTokenLifetime = false

虽然没有设置

UseTokenLifetime = false

(在OpenIdConnectAuthenticationOptions中)

身份提供者发出的身份令牌会在一小时后到期(而cookie则不会)。并且不能在本地重新发行。应该执行新的挑战(到IdP的往返)以获得新的令牌。实际上你解释的行为(在某些时候仍然经过身份验证但错过了所有的cookie)看起来很麻烦,但可能解释不够充分。

无论如何,如果您想扩大身份令牌的生命周期,您可以更改IdP中的设置(但不确定Azure B2C是否提供此类设置),在OpenIdConnectAuthenticationOptions中设置CC_SRC_PATH=github.com/fabcar/go if [ "$LANGUAGE" = "node" -o "$LANGUAGE" = "NODE" ]; then CC_SRC_PATH=/opt/gopath/src/github.com/fabcar/node fi ,或者问题外部认证回调中您自己的令牌(包含您需要的所有Cookie和所需的生命周期)。但是,再一次,最简单的方法就是关闭滑动,依靠你的外部IdP,并在旧的到期时使用新的令牌。

相关问题