问题 - 如果已经使用 asp net core Identityserver4 登录,如何避免显示登录页面?

问题描述

如何防止经过身份验证的用户无法打开 IndentitySever 登录页面,以便他们不会重新输入凭据,因为他们已经登录

我使用了两个独立的应用程序 Blazor Web Assembly,它们托管在 Asp 网络和 WebApi 上,使用 Identity Server 进行身份验证。

浏览器打开登录页面,我输入凭据,identityServer 的服务器应用程序成功完成该过程并将我重定向到主页,然后我按下浏览器的后退按钮,identityServer 登录页面打开

>

我什至尝试激活记住我以使身份记住用户登录,但我仍然得到相同的结果,尽管用户已通过身份验证,但登录页面打开时

带有 IdentityServer4 的代码应用 启动.cs

services.AddIdentityServer()
            .AddApiAuthorization<ApplicationUser,ApplicationDbContext>();
            //.AddSigningCredential(;
        services.AddAuthentication()
            .AddIdentityServerJwt();
        services.ConfigureApplicationCookie(options =>
        {
            options.Cookie.HttpOnly = true;
            options.ExpireTimeSpan = TimeSpan.FromMinutes(60);
            /*ptions.SlidingExpiration = true;*/
        });

带有 IdentityServer4 的代码应用 登录.cshtml

 public async Task<IActionResult> OnPostAsync(string returnUrl = null)
    {
        returnUrl = returnUrl ?? Url.Content("~/");

        if (ModelState.IsValid)
        {
            // This doesn't count login failures towards account lockout
            // To enable password failures to trigger account lockout,set lockoutOnFailure: true
            var result = await _signInManager.PasswordSignInAsync(Input.Email,Input.Password,Input.RememberMe,lockoutOnFailure: false);
            if (result.Succeeded)
            {
                _logger.Loginformation("User logged in.");
                return LocalRedirect(returnUrl);
            }
            if (result.RequiresTwoFactor)
            {
                return RedirectToPage("./LoginWith2fa",new { ReturnUrl = returnUrl,RememberMe = Input.RememberMe });
            }
            if (result.IsLockedOut)
            {
                _logger.LogWarning("User account locked out.");
                return RedirectToPage("./Lockout");
            }
            else
            {
                ModelState.AddModelError(string.Empty,"Invalid login attempt.");
                return Page();
            }
        }

        // If we got this far,something Failed,redisplay form
        return Page();
    }

任何想法将不胜感激。 最好的

解决方法

要直接回答您的问题,您可以检查是否存在 idsrv.session cookie

this.Request.Cookies["idsrv.session"]

作为替代方案,您可以让您的用户再次登录(如果他们愿意)。我们来看看 IdentityServer4 的演示: https://demo.identityserver.io/Account/Login?ReturnUrl=%2Fdiagnostics

登录使用:

User: bob 
Password: bob

现在点击返回并查看标题,您可以看到您确实已登录。

现在让我们输入一些新凭据:

User: alice
Password: alice

现在看看会发生什么