如果页面空闲了几分钟,IdentityServer 4 ASP .NET Core MVC Ajax调用将重定向以授权端点

时间:2019-07-10 13:12:08

标签: c# ajax asp.net-core identityserver4

我有一个使用Identity Server 4 oidc混合流作为身份验证器的ASP NET CORE MVC应用程序。

当我加载页面时,如果用户未通过身份验证,它将调用IS4授权端点进行登录。

在身份验证过程之后,在加载页面时,如果我将页面保持空闲状态超过30分钟,然后按下执行对ASP MVC App的AJAX调用的按钮,则它希望重定向到IS4再次授权端点。 (常见的XHR Cors错误)

我找不到此问题的原因。 IS4访问令牌的寿命为2小时。另外,在我的MVC应用程序中,我添加了IS4 AutomaticTokenManagement,因此,如果令牌过期,它将使用刷新令牌自动获取一个新令牌。

此外,我将ASP MVC App Cookie的有效期限设置为一天。

我不知道为什么身份验证会丢失。

services.AddAuthentication(options =>
            {
                options.DefaultScheme = "Cookies.Mvc";
                options.DefaultChallengeScheme = "oidc";
            })
            .AddCookie("Cookies.Mvc", options =>
            {
                // Configure the client application to use sliding sessions
                options.SlidingExpiration = true;
                // Expire the session of 15 minutes of inactivity
                options.ExpireTimeSpan = TimeSpan.FromDays(1);
            })      
            .AddAutomaticTokenManagement()
            .AddOpenIdConnect("oidc", options =>
            {                    
                options.SignInScheme = "Cookies.Mvc";                    
                options.Authority = MyAuthorityAuthServerSettings.Authority;
                options.RequireHttpsMetadata = MyAuthorityAuthServerSettings.RequiredHttpsMetadata;
                options.ClientId = MyAuthorityOpenIDSettings.ClientId;
                options.ClientSecret = MyAuthorityOpenIDSettings.ClientSecret;
                options.SaveTokens = true;
                options.GetClaimsFromUserInfoEndpoint = true;
                options.ResponseType = "code id_token";
                options.Scope.Add(MyAuthorityOpenIDSettings.Scope);
                options.Scope.Add("offline_access");
                options.ClaimActions.MapJsonKey(MyAuthorityClaims.UserId, MyAuthorityClaims.UserId);
                options.ClaimActions.MapJsonKey(MyAuthorityClaims.UserName, MyAuthorityClaims.UserName);
                options.UseTokenLifetime = false;                    
            });

页面空闲一段时间后,身份验证丢失的原因可能是什么?如果我在另一个导航器选项卡中加载同一页面,则该页面不会重定向到已认证的页面。似乎只有在其空闲并使用ajax调用后才会发生。

更新:

添加了登录/退出代码:

        [AllowAnonymous]
    public IActionResult Login()
    {
        return Challenge(new AuthenticationProperties
        {
            RedirectUri = "/Home/Index"
        }, "oidc");
    }

    [AllowAnonymous]
    public IActionResult Logout()
    {
        return SignOut(new AuthenticationProperties
        {
            RedirectUri = "/Home/Index"
        }, "Cookies.Mvc", "oidc");
    }

0 个答案:

没有答案