什么在 ASP.NET 中使用 Cookie 身份验证将 IsAuthenticated 设置为 true

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

我想知道哪个组件会验证传入的身份验证 cookie 并将

HttpContext.User.Identity.IsAuthenticated
设置为 true,甚至在第一个中间件组件执行之前,即使我在中间件管道中根本没有
app.UseAuthentication()

到目前为止,我希望这个身份验证中间件组件能够完成这项工作。我创建了一个自定义中间件模块,将其添加到中间件管道的第一个位置,当调用此模块时,

IsAuthenticated
已经为真 - 只要浏览器传入有效的 cookie。有人可以解释一下谁或什么评估了 cookie 并将
IsAuthenticated
设置为 true 吗?

我有一个简单的登录页面来输入名称/密码,最终出现在以下后处理程序中 - 不,那不是生产代码! :)

public async Task<IActionResult> OnPostAsync()
{
    if (!ModelState.IsValid) 
        return Page();

    if (Credential is { UserName: "admin", Password: "password" })
    {
        var claims = new List<Claim>
        {
            new Claim(ClaimTypes.Name, "admin"),
            new Claim(ClaimTypes.Email, "[email protected]")
        };

        var identity = new ClaimsIdentity(claims, "MyCookieAuth");
        var claimsPrincipal = new ClaimsPrincipal(identity);

        await HttpContext.SignInAsync("MyCookieAuth", claimsPrincipal);

        return Redirect("/index");
    }

    return Page();
}

这是

program.cs

var builder = WebApplication.CreateBuilder(args);
builder.Services.AddRazorPages();
builder.Services.AddAuthentication().AddCookie("MyCookieAuth", options =>
{
    options.Cookie.Name = "MyCookieAuth";
    
});

var app = builder.Build();

app.UseStaticFiles();
app.UseRouting();
app.MapRazorPages();
app.Run();

还有一个简单的

index.cshtml
来显示
IsAuthenticated
的状态:

@page
@model IndexModel

<div class="text-center">
    <p>IsAuthenticated: @HttpContext.User.Identity.IsAuthenticated</p>
</div>

当我成功登录时,cookie 会发送回浏览器,我会被重定向到索引页面,并且我已通过身份验证,一切都很好并且可以理解。

但是,如果我带着该 cookie 返回,直接进入索引页面,我会立即通过身份验证。正如你所看到的,我确实没有

app.UseAuthentication();
在管道中。怎么办?

asp.net .net authentication razor-pages cookie-authentication
1个回答
0
投票

发生这种情况是因为身份验证处理程序是由 ASP.Net Core 自动注册的。 通常我们在中间件中添加

app.UseAuthentication()
, 即使您尚未添加它,它也会由于 Program.cs 中的 AddAuthentication() 代码而自动注册,这将设置 HttpContext.User 的身份验证。

builder.Services.AddAuthentication().AddCookie("MyCookieAuth", options =>
{
    options.Cookie.Name = "MyCookieAuth";
    
});

Cookie 身份验证处理程序将检查身份验证 cookie 的请求,如果找到有效的 cookie,它将对用户进行身份验证并设置

HttpContext.User.IsAuthenticated to True.

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.