zoukankan      html  css  js  c++  java
  • authentication与网站安全验证

    1.Forms 身份验证提供程序

       

    通过 Forms 身份验证,可以使用所创建的登录窗体验证用户的用户名和密码。未经过身份验证的请求被重定向到登录页,用户在该页上提供凭据和提交窗体。如果应用程序对请求进行了验证,系统会颁发一个票证,该票证包含用于重建后续请求的标识的密钥。

       

    ASP.NET Forms 身份验证概述

    Forms 身份验证使您可以使用自己的代码对用户进行身份验证,然后将身份验证标记保留在 Cookie 或页的 URL 中。Forms 身份验证通过FormsAuthenticationModule 类参与到 ASP.NET 页的生命周期中。可以通过 FormsAuthentication 类访问 Forms 身份验证信息和功能。

    若要使用 Forms 身份验证,可以创建一个登录页。该登录页既可收集用户的凭据,又包含用于对这些凭据进行身份验证的代码。通常,可以对应用程序进行配置,以便在用户尝试访问受保护的资源(如要求身份验证的页)时,将请求重定向到登录页。如果用户的凭据有效,则可以调用FormsAuthentication 类的方法,以使用适当的身份验证票证 (Cookie) 将请求重定向回到最初请求的资源。如果不需要进行重定向,则只需获取 Forms 身份验证 Cookie 或对其进行设置即可。在后续的请求中,用户的浏览器会随同请求一起传递相应的身份验证 Cookie,从而绕开登录页。

    通过使用 authentication 配置元素,可以对 Forms 身份验证进行配置。最简单的情况是使用登录页。在配置文件中,指定一个 URL 以将未经身份验证的请求重定向到登录页。然后在 Web.config 文件或单独的文件中定义有效的凭据。下面的示例演示配置文件的一部分,其中为 Authenticate 方法指定了登录页和身份验证凭据。密码已经使用 HashPasswordForStoringInConfigFile 方法进行加密。

    <authentication mode="Forms">
    <forms name="SavingsPlan" loginUrl="/Login.aspx">
    <credentials passwordFormat="SHA1">
    <user name="Kim"
    password="07B7F3EE06F278DB966BE960E7CBBD103DF30CA6"/>
    <user name="John"
    password="BA56E5E0366D003E98EA1C7F04ABF8FCB3753889"/>
    </credentials>
    </forms>
    </authentication>

    在身份验证成功之后,FormsAuthenticationModule 模块会将 User 属性的值设置为对经过身份验证的用户的引用。下面的代码示例演示如何以编程方式读取经过 Forms 身份验证的用户的标识。

    以上配置可以通过 FormsAuthentication.Authenticate(model.UserName, model.Password) 来验证是否通过认证

    String authUser2 = User.Identity.Name;  

    Forms 身份验证和身份验证服务

       

    通过使用 ASP.NET 身份验证服务,还可以作为 Windows Communication Framework (WCF) 服务来访问 Forms 身份验证。身份验证服务使您能够从可以发送和使用 SOAP 格式的消息的任何应用程序使用 Forms 身份验证。身份验证服务接受用户凭据并返回 Forms 身份验证 Cookie。

       

    https://msdn.microsoft.com/zh-cn/library/9wff0kyh(v=vs.100).aspx

       

    Form身份验证控制流

    浏览器和 HTTP 操作

    服务器答复

    从服务器请求受保护的资源。HTTP 操作为:

    GET /default.aspx

    如果不存在身份验证 Cookie,则将请求重定向到登录页以收集凭据。使用 RETURNURL 作为关键字,将有关起始页的信息放在查询字符串中。服务器 HTTP 答复为:

    302 Found
    Location: http://samples.microsoft.com/logon.aspx?RETURNURL=/default.aspx

    重定向到登录页。HTTP 操作为:

    GET /logon.aspx?RETURNURL=/default.aspx

    返回登录页。为安全起见,建议对登录页使用安全套接字层 (SSL),以阻止用户凭据以明文形式发送。服务器 HTTP 答复为:

    200 OK

    用户在登录页输入凭据后,提交该页。HTTP 操作为:

    POST /logon.aspx?RETURNURL=/default.aspx

    验证用户凭据,如果凭据通过身份验证,则将浏览器重定向到在 QueryString 中作为 RETURNURL 变量指定的原始 URL。默认情况下,身份验证票证以 Cookie 的形式发出。

    说明:

    您可以使用 CookieMode 属性,指定将身份验证票证包含在 URL 中,而不是包含在 Cookie 中。

    服务器 HTTP 答复为:

    302 Found
    Location: /default.aspx

    遵循重定向操作并再次请求原始资源。HTTP 操作为:

    GET /default.aspx

    如果用户通过身份验证,则允许访问并授予身份验证 Cookie,该 Cookie 中包含身份验证票证。同一浏览器会话的以后的请求将在模块检查该 Cookie 时进行身份验证。可以创建可用于以后的会话的持久性 Cookie,但该 Cookie 的使用期截止到到期日期为止。服务器 HTTP 答复为:

    200 OK
    Set-Cookie: ASPXTICKET=ABCDEFG12345;Path=/

    注意,Cookie 路径设置为 /。由于 Cookie 名称区分大小写,因此这有助于防止站点中的 URL 的大小写不一致。例如,如果路径设置为 /SavingsPlan,而链接包含 /savingsplan,由于浏览器不会发送 Cookie,用户将被迫重新进行身份验证。

       

    若通过了认证,需要调用 FormsAuthentication.SetAuthCookie,才会创建票证,响应中才会带set-cookie命令;而在注销时需要调用FormsAuthentication.SignOut来清除票证,响应中会添加set-cookie=;命令来清除浏览器端的票证。

       

    跨应用程序进行 Forms 身份验证

    若要配置跨应用程序的 Forms 身份验证,对于参与共享的 Forms 身份验证的所有应用程序,应将 Web.config 文件的 forms 和 machineKey 节的属性设置为相同的值。nameprotectionpathvalidationKeyvalidationdecryptionKey 和 decryption 属性必须在所有应用程序中都完全相同。同样,用于身份验证票证(Cookie 数据)的加密密钥值和验证密钥值以及加密方案和验证方案必须相同。如果设置不匹配,则不能共享身份验证票证。如下面可直接尝试

    <forms defaultUrl="/Home/Index" loginUrl="/Home/LogOn" timeout="60" name=".ASPXFORMSAUTH" protection="All" path="/" ></forms>
    
    <machineKey
    
    validationKey="3FF1E929BC0534950B0920A7B59FA698BD02DFE8"
    
    decryptionKey="280450BB36319B474C996B506A95AEDF9B51211B1D2B7A77"
    
    decryption="3DES"
    
    validation="SHA1"/>

    但经我尝试,确实两个系统一方登录,另一方则在请求时附带相同票证,但是个人估计这是停留在ASP.NET层次的,过了这个认证,到不同系统因为认证逻辑如果有出入仍会导致最终认证结果不同。但注销时则不一样,一方注销,票证清空,所有系统的Form认证都不通过。

    来自 <https://msdn.microsoft.com/zh-cn/library/eb0zx8fc(v=vs.100).aspx>

       

    2.Windows 身份验证提供程序

    Web.config中设置

    <authentication mode="Windows"/>

    在IIS中才可实现,IIS安装时"基本身份验证"需要勾上,

       

    IIS的安全性才会有"基本身份验证",

    将其启用,访问网站时则会弹出windows的登录窗口,此时输入的用户名密码则是服务器中的windows用户名及其密码则可登录。

    查看过它的网络请求,并未发现类型form请求中的服务器交互信息及相关cookie。

       

    来自 <https://msdn.microsoft.com/zh-cn/library/907hb5w9(v=vs.100).aspx>

  • 相关阅读:
    STL的适配器、仿函数学习之一:accumulate和for_each的使用心得
    百度笔试题--------数字拼接,求出最小的那个
    百度面试题----依概率生成
    百度笔试题----C语言版revert
    百度笔度题-----蚂蚁爬杆问题
    Try....Catch......Finally 的执行顺序
    数据库SQL SERVER 2008R2 远程连接配置说明
    C#中的数据库的连接方式分类说明(转载)
    网络通信—udp使用领悟
    (转载)C#网络通信之TCP连接
  • 原文地址:https://www.cnblogs.com/HopeGi/p/5809039.html
Copyright © 2011-2022 走看看