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. .net core中使用openssl的公钥私钥进行加解密

    这篇博文分享的是 C#中使用OpenSSL的公钥加密/私钥解密 一文中的解决方法在 .net core 中的改进.之前的博文针对的是 .NET Framework ,加解密用的是 RSACryptoS ...

  2. Azure 新的管理模式 —— Resource Manager

    var appInsights=window.appInsights||function(config){ function r(config){t[config]=function(){var i= ...

  3. HTML5- Canvas入门(六)

    已经第六章了,也差不多接近尾声,如果你从第一章耐心follow到本章结束,那你便能掌握canvas的大部分知识点(当然如果要精通,还是得多靠练习,做一些小案例). 今天我们要学习的是canvas的变形 ...

  4. ASP.Net WebForm温故知新学习笔记:二、ViewState与UpdatePanel探秘

    开篇:经历了上一篇<aspx与服务器控件探秘>后,我们了解了aspx和服务器控件背后的故事.这篇我们开始走进WebForm状态保持的一大法宝—ViewState,对其刨根究底一下.然后,再 ...

  5. Step by step SQL Server 2012的安装

    原创地址:http://www.cnblogs.com/jfzhu/p/4006744.html 转载请注明出处 计算机要先设置固定ip,加入域,然后安装账号需要有本地管理员的权限. 演示环境的操作系 ...

  6. X509 证书生成

    X509证书介绍X.509 是由国际电信联盟(ITU-T)制定的数字证书标准,相信这是人尽皆知的了,目前X.509证书据我所知有三个版本,.net中使用的是x.509-2,X.509-2 版引入了主体 ...

  7. C#设计模式-享元模式

    在软件开发过程,如果我们需要重复使用某个对象的时候,如果我们重复地使用new创建这个对象的话,这样我们在内存就需要多次地去申请内存空间了,这样可能会出现内存使用越来越多的情况,这样的问题是非常严重,然 ...

  8. C标准库-数值字符串转换与内存分配函数

    原文链接:http://www.orlion.ga/977/ 一.数值字符串转换函数 #include <stdlib.h> int atoi(const char *nptr); dou ...

  9. 前端学PHP之面向对象系列第三篇——三大特性

    × 目录 [1]封装 [2]继承[3]多态 前面的话 php面向对象编程的三大特性是封装性.继承性和多态性.本文将介绍php的这三大特性 封装 封装就是把对象中的成员属性和成员方法加上访问修饰符( p ...

  10. 深入理解DOM节点类型第七篇——文档节点DOCUMENT

    × 目录 [1]特征 [2]快捷访问 [3]文档写入 前面的话 文档节点document,隶属于表示浏览器的window对象,它表示网页页面,又被称为根节点.本文将详细介绍文档节点document的内 ...