• 认证方式


    Claims-based

    分开认证和授权,如用QQ账户登录系统。

    .net 下实现

    ClaimsIdentity

    ClaimsPrincipal

    Windows

    使用windows认证:

    <authentication mode="Windows" />
    

    相关模块:

    WindowsAuthenticationModule  //AuthenticateRequest事件,使用从IIS传递到ASP.NET的Windows访问令牌(Token)创建一个WindowsIdentity对象,Token通过调用context.WorkerRequest.GetUserToken()获得, 然后再根据WindowsIdentity 对象创建WindowsPrincipal对象, 然后把它赋值给HttpContext.User

    UrlAuthorizationModule  //

    FileAuthorizationModule  //判读HttpContext.User.Identity如果是WindowsIdentity, 则调用 AccessCheck Win32 函数(通过 P/Invoke)来确定是否授权经过身份验证的客户端访问请求的文件。果该文件的安全描述符的随机访问控制列表 (DACL) 中至少包含一个 Read 访问控制项 (ACE),则允许该请求继续。 否则,FileAuthorizationModule 类调用 HttpApplication.CompleteRequest 方法并将状态码 401 返回到客户端。

    LDAP  //访问域

    DirectoryEntry entry = new DirectoryEntry("LDAP://test.corp");
    

    安全上下文与用户模拟:

    HttpContext.User.Identity  //登录windows的账号identity

    WindowsIdentity.GetCurrent()  //获取与当前线程相关的WindowsIdentity对象,当前线程运行在IIS进程中,得到IIS的账户identity

    使用模拟可使WindowsIdentity.GetCurrent()返回HttpContext.User.Identity对应的identity

    <authentication mode="Windows" />
    <identity impersonate="true"/>
    

      

    Forms认证

    相关模块:

    Request.IsAuthenticated  //判断是否是登录用户发起的request

    HttpContext.User.Identity.Name //获取登录名

    FormsAuthenticationModule //用于Form认证, 检查用户身份的cookie,并生成identity对象,处于AuthenticateRequest事件

    FormsAuthentication.SetAuthCookie(loginName, true)  //登录时调用,创建cookies

    FormsAuthentication.SignOut()  //注销

    UrlAuthorizationModule  //url授权,处于AuthorizeRequest事件

    FormsAuthenticationTicket  //根据用户名创建,可以包含额外数据,加密后放cookie

    受限页面(登录夜可以正常访问因为设置了HttpContext.SkipAuthorization = true)

    <location path="Admin">
        <system.web>
            <authorization>
                <allow roles="Admin"/>
                <deny users="*"/>
            </authorization>
        </system.web>
    </location>
    

    css js 目录可以添加以下web.config,使其可以正常访问

    <configuration>
        <system.web>
            <authorization>
                <allow users="*"/>
            </authorization>
        </system.web>
    </configuration>
    

    实现原理:

    使用form认证:

    <authentication mode="Forms" >
        <forms cookieless="UseCookies" name="LoginCookieName" loginUrl="~/Default.aspx"></forms>
    </authentication>
    

    登录流程:

    1.判断用户名密码是否正确

    2.根据登录名创建FormsAuthenticationTicket

    3.用FormsAuthentication.Encrypt()加密(用到machinekey)

    4.加密内容放入Response写入cookies

    5.站点内重定向

    认证流程:

    1.请求是带上加密cookies

    2.FormsAuthenticationModule读取cookies

    3.提取FormsAuthenticationTicket对象,并判断是否过期

    4.根据FormsAuthenticationTicket构建FormsIdentity并设置HttpContext.User(Prinsipal对象)  //如何判断FormsAuthenticationTicket是合法的?

    5.UrlAuthorizationModule检查页面授权

    enableCrossAppRedirects="true" //跨站点form认证

    OWin

    通过application delegate解耦web应用与服务

    .net 认证基础

    FormsAuthenticationTicket(form认证)

    Identity(包含Name,IsAuthenticated,AuthenticationType)

    Principal(AppDomain级别,包含Identity,包含InRole()判断在那个用户组)

    RoleProvider(基于Principal实现)

    [Authorize(Roles="Users")]  //可用在controller上

     GenericPrincipal?

    DefaultAuthenticationModule?

    reference:

    http://www.cnblogs.com/fish-li/archive/2012/04/15/2450571.html

    http://www.cnblogs.com/jesse2013/p/aspnet-identity-claims-based-authentication-and-owin.html#

  • 相关阅读:
    DeepLearning.ai学习笔记汇总
    Coursera深度学习(DeepLearning.ai)编程题&笔记
    DeepLearning.ai学习笔记(一)神经网络和深度学习--Week3浅层神经网络
    Andrew Ng机器学习课程笔记--汇总
    Andrew Ng机器学习课程笔记--week3(逻辑回归&正则化参数)
    Andrew Ng机器学习课程笔记--week1(机器学习介绍及线性回归)
    C++学习笔记之模板篇
    【GAMES101-现代计算机图形学课程笔记】Lecture 10 Geometry 1 (介绍)
    GAMES201:高级物理引擎实战指南-Lecture 1 Taichi编程语言介绍
    【GAMES101-现代计算机图形学课程笔记】Lecture 09 Shading 3 (纹理映射)
  • 原文地址:https://www.cnblogs.com/yfann/p/4679060.html
Copyright © 2020-2023  润新知