Asp.net核心身份成功登录重定向回登录页面

问题描述 投票:3回答:1

我有一个问题,即asp.net标识框架在用户成功登录后将用户重定向回登录页面。

这是使用标准的Asp.net核心身份。它是2.1.1版本。生成剃刀页面的脚手架。不确定这是否重要。

我知道用户已成功登录,因为我收到了日志消息

... Areas.Identity.Pages.Account.LoginModel:信息:用户登录。

但随后它会直接重定向到登录页面。

如果我使用fiddler,我可以看到请求中有一个cookie,所以从这个角度看它都很好看。

.AspNetCore.Identity.Application=CfDJ8KJxkuir9ZJIjFLCU2bzm9n6X...

所以我猜中间件正在处理身份验证但不接受cookie?

如果我能看到auth的实际中间件正在做什么我可能有一个想法,但我找不到它。

任何帮助赞赏

c# asp.net asp.net-core asp.net-core-identity
1个回答
5
投票

为了让ASP.NET Core管道识别用户已登录,需要在UseAuthentication类的Configure方法中调用Startup,如下所示:

app.UseAuthentication();
app.UseMvc(); // Order here is important (explained below).

使用Cookies身份验证方案,UseAuthentication的使用松散地执行以下操作:

  • 从请求中读取.AspNetCore.Identity.Application cookie的内容,该cookie表示发出请求的用户的身份。
  • 使用代表所述用户的User填充HttpContextClaimsPrincipal属性。

这是对所发生情况的简化说明,但它强调了身份验证中间件执行的重要工作。如果没有身份验证中间件,.AspNetCore.Identity.Application将不会用于对用户进行身份验证,因此用户将不会进行身份验证。在您的情况下,虽然用户已登录(即正在设置cookie),但管道中间件(例如MVC)没有看到此用户(即cookie未被读取),因此看到未经身份验证的请求并再次重定向登录。

鉴于认证中间件读取cookie并随后填充ClaimsPrincipal,应该清楚UseAuthentication调用也必须在UseMvc调用之前,以便以正确的顺序发生。否则,MVC中间件在Authentication中间件之前运行,并且不会使用填充的ClaimsPrincipal

如果您不添加处理登录的中间件,为什么无法登录?!?

中间件不处理登录 - 它处理身份验证过程。用户已登录,这是由.AspNetCore.Identity.Application cookie的存在所证实的。这里失败的是读取所述cookie。

© www.soinside.com 2019 - 2024. All rights reserved.