ASP.NET Core 使用Cookie验证身份

ASP.NET Core 1.x提供了通过Cookie 中间件将用户主体序列化为一个加密的Cookie,然后在后续请求中验证Cookie并重新创建主体,并将其分配给HttpContext.User属性。如果您要提供自己的登录界面和用户数据库,可以使用作为独立功能的Cookie中间件。

ASP.NET Core 2.x的一个主要变化是不再存在Cookie中间件。取而代之的是在Startup.cs文件中的Configure方法中的调用UseAuthentication方法会添加设置HttpContext.User属性的 AuthenticationMiddleware 中间件。


添加配置

ASP.NET Core 1.x

按下列步骤操作:

  • 在您的项目中安装Microsoft.AspNetCore.Authentication.CookiesNuGet包。此包包含Cookie中间件。

  • Startup.cs文件中的Configure方法中添加下面的行,在app.UseMvc()语句之前:

        app.UseCookieAuthentication(new CookieAuthenticationOptions()
        {
            AccessDeniedPath = "/Account/Forbidden/",
            AuthenticationScheme = "MyCookieAuthenticationScheme",
            AutomaticAuthenticate = true,
            AutomaticChallenge = true,
            LoginPath = "/Account/Unauthorized/"
        });
ASP.NET Core 2.x

按下列步骤操作:

  • 如果不使用Microsoft.AspNetCore.All 元包,则在您的项目中安装2.0版的Microsoft.AspNetCore.Authentication.CookiesNuGet包。

  • Startup.cs文件中的Configure方法中调用UseAuthentication方法:

        app.UseAuthentication();
  • Startup.cs文件中的ConfigureServices方法中调用AddAuthenticationAddCookie方法:

        services.AddAuthentication("MyCookieAuthenticationScheme")
                .AddCookie("MyCookieAuthenticationScheme", options => {
                    options.AccessDeniedPath = "/Account/Forbidden/";
                    options.LoginPath = "/Account/Unauthorized/";
                });

上面的代码片段配置了以下部分或全部选项:

  • AccessDeniedPath - 当用户尝试访问资源但没有通过任何授权策略时,这是请求会重定向的相对路径资源。

  • AuthenticationScheme - 这是一个已知的特定Cookie认证方案的值。当有多个Cookie验证实例,并且您想限制对一个实例的授权时,这就非常有用。

  • AutomaticAuthenticate - 此标识仅适用于ASP.NET Core 1.x。它表示Cookie身份验证应在每个请求上运行,并尝试验证和重建序列化主体。

  • AutomaticChallenge - 此标识仅适用于ASP.NET Core 1.x。这表示当授权失败时,1.x Cookie认证应将浏览器重定向到LoginPathAccessDeniedPath

  • LoginPath - 当用户尝试访问资源但尚未认证时,这是请求重定向的相对路径。

其它选项包括为Cookie认证创建的设置选项,身份验证的Cookie的名称,Cookie的域和Cookie各种安全属性。默认情况下,Cookie身份验证为其创建的任何Cookie使用适当的安全选项,例如:

  • 设置HttpOnly标志以防止客户端JavaScript中访问Cookie

  • 如果请求是通过HTTPS访问,则将Cookie限制为HTTPS


创建身份认证Cookie

要创建一个保存用户信息的cookie,您必须构建一个ClaimsPrincipal 保存您希望序列化到Cookie中的信息。

ASP.NET Core 1.x
    await HttpContext.Authentication.SignInAsync("MyCookieAuthenticationScheme", principal);
ASP.NET Core 2.x
    await HttpContext.SignInAsync("MyCookieAuthenticationScheme", principal);

这将创建一个加密的Cookie并将其添加到当前响应中。在调用SignInAsync时,必须在配置中指定的AuthenticationScheme

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值