Jer*_*ero 5 c# asp.net asp.net-core asp.net-core-identity
我有一个问题,在他们成功登录后,asp.net身份框架会将用户重定向回登录页面。
这是使用标准的Asp.net Core Identity。它是版本2.1.1。生成剃须刀页面的脚手架。不知道这是否有意义。
我知道用户已成功登录,因为我收到了日志消息
... Areas.Identity.Pages.Account.LoginModel:信息:用户已登录。
但随后,它将直接重定向回登录页面。
如果我使用提琴手,那么我可以看到请求上有一个cookie,因此从该角度来看,它看起来都很不错。
.AspNetCore.Identity.Application=CfDJ8KJxkuir9ZJIjFLCU2bzm9n6X...
Run Code Online (Sandbox Code Playgroud)
因此,我猜正在处理身份验证但不接受Cookie的中间件?
如果我可以看到auth的实际中间件在做什么,那么我可能有一个主意,但找不到。
任何帮助表示赞赏
Joh*_*n81 12
请注意,该顺序很重要。我将这些颠倒过来并遇到了与原始海报所遇到的完全相同的问题。在我弄明白之前浪费了几个小时......
app.UseAuthentication();
app.UseAuthorization();
Run Code Online (Sandbox Code Playgroud)
Kir*_*kin 10
为了使ASP.NET Core管道能够识别用户已登录,UseAuthentication在类的Configure方法中需要对进行调用Startup,如下所示:
app.UseAuthentication();
app.UseMvc(); // Order here is important (explained below).
Run Code Online (Sandbox Code Playgroud)
使用Cookies身份验证方案,UseAuthentication松散地执行以下操作:
.AspNetCore.Identity.Application从请求中读取Cookie 的内容,该内容表示发出请求的用户的身份。User属性填充。HttpContextClaimsPrincipal这是对发生的情况的简化说明,但是它突出了身份验证中间件执行的重要工作。如果没有身份验证中间件,.AspNetCore.Identity.Application则不会使用来对用户进行身份验证,因此不会对用户进行身份验证。在您的情况下,尽管用户已登录(即正在设置cookie),但是管道中间件(例如MVC)没有看到该用户(即未读取cookie),因此看到了未经身份验证的请求并针对登录。
鉴于认证中间件读取cookie,然后填充ClaimsPrincipal,应该清楚的是,UseAuthentication呼叫也必须是之前的UseMvc呼叫为了这个正确的顺序发生。否则,MVC中间件将在身份验证中间件之前运行,并且无法与填充的一起使用ClaimsPrincipal。
如果不添加用于处理登录的中间件,为什么登录失败?
中间件不处理登录-它处理身份验证过程。用户已登录,这通过.AspNetCore.Identity.Applicationcookie 的存在来确认。这里失败的是读取所述cookie。
| 归档时间: |
|
| 查看次数: |
2999 次 |
| 最近记录: |