为了账号安全,请及时绑定邮箱和手机立即绑定

Asp.net core Identity 成功登录重定向回登录页面

Asp.net core Identity 成功登录重定向回登录页面

C#
交互式爱情 2021-11-07 19:15:56
我有一个问题,asp.net 身份框架在用户成功登录后将用户重定向回登录页面。这是使用标准的 Asp.net Core Identity。它是 2.1.1 版本。生成剃刀页面的脚手架。不确定这是否重要。我知道用户已成功登录,因为我收到了日志消息...Areas.Identity.Pages.Account.LoginModel:信息:用户登录。但随后它会直接重定向回登录页面。如果我使用 fiddler,我可以看到请求中有一个 cookie,所以从这个角度来看,这一切看起来都不错。.AspNetCore.Identity.Application=CfDJ8KJxkuir9ZJIjFLCU2bzm9n6X...所以我猜是处理身份验证但不接受 cookie 的中间件?如果我能看到身份验证的实际中间件在做什么,我可能有一个想法,但我找不到。任何帮助表示赞赏
查看完整描述

3 回答

?
红糖糍粑

TA贡献1815条经验 获得超6个赞

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


app.UseAuthentication();

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

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


.AspNetCore.Identity.Application从请求中读取cookie的内容,该内容代表发出请求的用户的身份。

用代表所述用户的a填充 的User属性。HttpContextClaimsPrincipal

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


鉴于认证中间件读取cookie,然后填充ClaimsPrincipal,应该清楚的是,UseAuthentication呼叫也必须是之前的UseMvc呼叫为了这个正确的顺序发生。否则,MVC 中间件在身份验证中间件之前运行,并且不会使用填充的ClaimsPrincipal.


为什么不添加处理登录的中间件会登录失败?!?


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


查看完整回答
反对 回复 2021-11-07
?
烙印99

TA贡献1829条经验 获得超13个赞

请注意,该顺序很重要。我将这些颠倒过来并遇到了与原始海报所遇到的完全相同的问题。在我弄明白之前浪费了几个小时......

    app.UseAuthentication();
    app.UseAuthorization();


查看完整回答
反对 回复 2021-11-07
?
慕斯709654

TA贡献1840条经验 获得超5个赞

如果你使用 .net core 3(这次是预览版)


将您的“app.UseEndpoints”放在 startup.cs 到代码块的末尾。


例如它应该按这个顺序


        app.UseAuthentication();

        app.UseAuthorization();


        app.UseEndpoints(endpoints =>

        {

            endpoints.MapControllerRoute(

                name: "default",

                pattern: "{controller=Home}/{action=Index}/{id?}");

            endpoints.MapRazorPages();

        });


查看完整回答
反对 回复 2021-11-07
  • 3 回答
  • 0 关注
  • 561 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信