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 节的属性设置为相同的值。name、protection、path、validationKey、validation、decryptionKey 和 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>

authentication与网站安全验证的更多相关文章

  1. 搭建开发框架Express,实现Web网站登录验证

    NodeJS学习笔记(一)——搭建开发框架Express,实现Web网站登录验证   JS是脚本语言,脚本语言都需要一个解析器才能运行.对于写在HTML页面里的JS,浏览器充当了解析器的角色.而对于需 ...

  2. ldap + kerberos + google authentication 实现两步验证

    第一步:ldap + kerberos 整合  ,参考之前的文章 第二步:google authentication 安装配置,参考之前的文章 第三步:整合 ldap + kerberos + goo ...

  3. Zend Framework 2参考Zend\Authentication(摘要式身份验证)

    Zend Framework 2参考Zend\Authentication(摘要式身份验证) 介绍 摘要式身份验证是HTTP身份验证的方法,提高了基本身份验证时提供的方式进行身份验证,而无需在网络上以 ...

  4. System.Security.Authentication.AuthenticationException:根据验证过程,远程证书无效。

    好久没写博客了,今天突然遇到个神奇的问题. 做好的网站在win10上和Windows sever 2012 上都没有问题,搬到Windows sever 2003上就出现了这么一个错误: Server ...

  5. NodeJS学习笔记(一)——搭建开发框架Express,实现Web网站登录验证

    JS是脚本语言,脚本语言都需要一个解析器才能运行.对于写在HTML页面里的JS,浏览器充当了解析器的角色.而对于需要独立运行的JS,NodeJS就是一个解析器.每一种解析器都是一个运行环境,不但允许J ...

  6. 5款最好的免费在线网站CSS验证器

    这里是一个名单, 5免费在线CSS验证器的网站.这些网站让你验证你的CSS代码的自由,没有任何麻烦.你可以选择上传文件,验证CSS添加URL,或简单的复制和粘贴完整的CSS代码.好的方面是,这些网站不 ...

  7. SpringBoot整合sa-token,完成网站权限验证

    sa-token是什么? sa-token是一个JavaWeb轻量级权限认证框架,其API调用非常简单,有多简单呢?以登录验证为例,你只需要: // 在登录时写入当前会话的账号id StpUtil.s ...

  8. 破解网站码验证,Java实现,不调用任何平台api接口

    package image.images; import java.io.File; import java.io.IOException; import java.io.InputStream; i ...

  9. 利用nginx向现有网站添加登录验证功能(不添加修改现有网站代码)

    在不改变现有网站代码的前提下加入验证功能: 1.假设现有网站后端nodejs,端口3000,nginx配置如下 server { listen 80; server_name localhost; l ...

随机推荐

  1. SSDB:高性能数据库服务器

    SSDB是一个开源的高性能数据库服务器, 使用Google LevelDB作为存储引擎, 支持T级别的数据, 同时支持类似Redis中的zset和hash等数据结构, 在同时需求高性能和大数据的条件下 ...

  2. Hadoop学习笔记—11.MapReduce中的排序和分组

    一.写在之前的 1.1 回顾Map阶段四大步骤 首先,我们回顾一下在MapReduce中,排序和分组在哪里被执行: 从上图中可以清楚地看出,在Step1.4也就是第四步中,需要对不同分区中的数据进行排 ...

  3. EasyPR--开发详解(3)高斯模糊、灰度化和Sobel算子

    在上篇文章中我们了解了PlateLocate的过程中的所有步骤.在本篇文章中我们对前3个步骤,分别是高斯模糊.灰度化和Sobel算子进行分析. 一.高斯模糊 1.目标 对图像去噪,为边缘检测算法做准备 ...

  4. iOS block种类和切换

    block 分为三种 NSGlobalBlock,NSStackBlock, NSMallocBlock. NSGlobalBlock:类似函数,位于text段: NSStackBlock:位于栈内存 ...

  5. [ASP.NET MVC 小牛之路]15 - Model Binding

    Model Binding(模型绑定)是 MVC 框架根据 HTTP 请求数据创建 .NET 对象的一个过程.我们之前所有示例中传递给 Action 方法参数的对象都是在 Model Binding ...

  6. Linux服务器配置之加载硬盘

    Linux服务器配置之加载硬盘 1.修改密码 passwd 2.测试密码是否成功 3.查看硬盘信息 fdisk –l 4.格式化分区 fdisk /dev/vdb 5.查看分区 6.快速格式化/dev ...

  7. 《Entity Framework 6 Recipes》中文翻译系列 (33) ------ 第六章 继承与建模高级应用之TPH与TPT (2)

    翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 6-8  嵌套的TPH建模 问题 你想使用超过一层的TPH继承映射为一张表建模. 解 ...

  8. Eclipse启动参数

    from 网络 eclipse 启动参数 -clean2013-- : eclipse 启动参数介绍(如添加插件时,如果不显示,则使用eclipse -clean启动) 其实,Eclipse是一个可以 ...

  9. IOS关于LKDBHelper实体对象映射插件运用

    一 插件简介: 其github地址:https://github.com/li6185377/LKDBHelper-SQLite-ORM 全面支持 NSArray,NSDictionary, Mode ...

  10. sql复习第四次

    1.关系操作的特点是集合操作 2.关系模型的完整性规则包括实体完整性规则,参照完整性规则,用户定义的完整性规则 3.rou联接运算是由笛卡儿积和选择操作组合而成的 4.自然联接运算是由笛卡儿积,选择, ...