问题描述
如何防止经过身份验证的用户无法打开 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
现在看看会发生什么