zoukankan      html  css  js  c++  java
  • asp.net core2 mvc 基础教程--cookie 身份认证

    Authentication 和 Authorization

    Authentication:认证。

    Authorization:授权。

    简单来说,认证是用来证明一个人的身份,比如说他是一个学生,一个老师,一个boss,那么就需要这么一个认证。授权是用来表示这个用户能做什么事情,比如admin可以修改删除数据,normal user只能查看数据。

    注册服务

    public void ConfigureServices(IServiceCollection services)
    {
    //注册Cookie认证服务
     services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
    .AddCookie(options =>
                {
                    options.Cookie.HttpOnly = true;
                    options.LoginPath = "/login";
                    options.ExpireTimeSpan = TimeSpan.FromDays(1);
                }); }

    在addcookie 中 CookieAuthenticationOptions 来设置相关的选项

    选项描述
    AccessDeniedPath HttpContext.ForbidAsync触发302时的跳转地址,默认/Account/AccessDenied
    ClaimsIssuer 用于设置 cookie 的Issuer 属性。
    Cookie.Domain cookie的有效域。默认是请求的服务器名。浏览器只会给符合的服务器发送 cookie。你可能会希望设置这个值来调整他的作用域。举个例子,设置成.contoso.com他的作用域就包括contoso.com,www.contoso.com,staging.www.contoso.com等。
    Cookie.Expiration 获取或设置cookie的有效期。core 2.1+不建议使用。建议是使用ExpireTimeSpan来设置 cookie 的失效时间。
    Cookie.HttpOnly 设置 cookie 是否是只能被服务器访问,默认 true,可以设置成 false 给客户端js 脚本访问,但是有可能会造成XSS(跨站脚本攻击)。
    Cookie.Name cookie 的名字。
    Cookie.Path 用来隔离同一个服务器下面的不同站点。比如站点是运行在/app1下面,设置这个属性为/app1,那么这个 cookie 就只在 app1下有效。
    Cookie.SameSite 表示浏览器是否允许 cookie 被附加到相同的站点。有几种枚举:SameSiteMode.Strict,只允许相同的站点。SameSiteMode.Lax允许以安全的 http方式附加到不同站点或相同站点。为了支持 OAuth 认证,需要设置成SameSiteMode.Lax
    Cookie.SecurePolicy 设置是否只允许 https。
    DataProtectionProvider 用于设置创建TicketDataFormat(在表格最后)
    Events 设置一些时间的处理程序。比如OnSignedIn,OnSigningOut等,默认是不做任何操作。
    EventsType Events的类型。
    ExpireTimeSpan 设置存储在 cookie 里面的认证票据的过期时间。服务端会验证加密的 ticket 的有效性。在设置了IsPersistent之后也能在 Set-Cookie 头里面返回。默认的过期时间是14天。
    LoginPath HttpContext.ChallengeAsync方法触发302跳转时候的地址。假设设置成/account/login,比如当前访问/secure 返回401,那么会跳转地址/account/login?returnUrl=/secure,当 login 页面生成一个新的登录身份之后,浏览器会跳转到 secure 页面。默认值是/Account/login
    LogoutPath 登出地址。
    ReturnUrlParameter 登录或登出之后页面可以做一个跳转,这个跳转地址作为一个参数传过去,这个就用来设置这个参数的名字。
    SessionStore 用来保存跨站点请求的身份信息。设置了之后只有 session 的标识符会发送到客户端。当身份标识比较多的时候可以用。
    SlidingExpiration 滑动过期。标识一个有新的过期时间的新 cookie是否可以被动态的分发。可以在SignInAsync方法里面使用AuthenticationProperties。使用绝对的 cookie 有效期时间来增加应用的安全性。举个例子:```await HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme,

    创建一个包含用户信息的 cookie需要构造一个ClaimsPrincipal。用户信息会被序列化然后保存在cookie 里面。

    用必要的 Claim来构造一个ClaimsIdentity,然后调用 SignInAsync 方法。

    var claims = new List<Claim>
    {
        new Claim(ClaimTypes.Name, user.Email),
        new Claim("FullName", user.FullName),
        new Claim(ClaimTypes.Role, "Administrator"),
    };
    
    var claimsIdentity = new ClaimsIdentity(
        claims, CookieAuthenticationDefaults.AuthenticationScheme);
    
    var authProperties = new AuthenticationProperties
    {
        //AllowRefresh = <bool>,
        // Refreshing the authentication session should be allowed.
    
        //ExpiresUtc = DateTimeOffset.UtcNow.AddMinutes(10),
        //cookie 的绝对过期时间,会覆盖ExpireTimeSpan的设置。
    
        //IsPersistent = true,
        //表示 cookie 是否是持久化的以便它在不同的 request 之间传送。设置了ExpireTimeSpan或ExpiresUtc是必须的。
    
        //IssuedUtc = <DateTimeOffset>,
        //  凭证认证的时间。
    
        //RedirectUri = <string>
        //http 跳转的时候的路径。
    };
    
    await HttpContext.SignInAsync(
        CookieAuthenticationDefaults.AuthenticationScheme, 
        new ClaimsPrincipal(claimsIdentity), 
        authProperties);

     部分知识转载于https://www.cnblogs.com/sheldon-lou/p/9545726.html

    更多知识看官方文档https://docs.microsoft.com/zh-cn/aspnet/core/security/authentication/cookie?view=aspnetcore-2.1&tabs=aspnetcore2x

  • 相关阅读:
    C# WinForm开发系列 Socket/WCF/Rometing/Web Services
    .net(c#) 简单的软件注册功能的实现:
    来自xici网友的Ubuntu和windows xp的Super PI性能测试
    最新的Linpack测试指南-基于woodcrest机器
    CFX x86_64 version issues 无法找到可执行文件
    如何检查一个mvapich的版本?
    Intel Tools Training Notes Intel Compiler, MKLs
    Infiniband IPoIB Debug FAQ
    让CFX的license server在开机的时候就自动启动
    FFTW 3.1.2 和 2.1.5编译
  • 原文地址:https://www.cnblogs.com/cqqinjie/p/13210860.html
Copyright © 2011-2022 走看看