表单身份验证允许您使用自己的代码对用户进行身份验证,然后在cookie或页面URL中维护身份验证令牌。表单身份验证通过FormsAuthenticationModule类参与ASP.NET页面生命周期。您可以通过FormsAuthentication类访问表单身份验证信息和功能。

要使用表单身份验证,您需要创建一个登录页面,该页面从用户收集凭据,其中包含用于对凭据进行身份验证的代码。通常,您将应用程序配置为在用户尝试访问受保护资源(例如需要身份验证的页面)时将请求重定向到登录页面。如果用户的凭据有效,则可以调用FormsAuthentication类的方法,使用适当的身份验证票证(cookie)将请求重定向回最初请求的资源。如果您不想重定向,可以只获取表单身份验证cookie或进行设置。在后续请求中,用户的浏览器传递带有请求的身份验证cookie,然后绕过登录页面。

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

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

Dim authUser2 As String = User.Identity.Name

表单身份验证,ASP.NET成员身份和登录控件

使用表单身份验证的一种便捷方法是使用ASP.NET成员身份和ASP.NET登录控件。 ASP.NET成员资格允许您存储和管理用户信息,并包括对用户进行身份验证的方法。 ASP.NET登录控件使用ASP.NET成员资格。它们封装逻辑以提示用户提供凭据,验证用户,恢复或替换密码等。实际上,ASP.NET成员资格和ASP.NET登录控件提供了一种表单身份验证的抽象层。这些功能取代了您通常必须执行的大部分或全部工作才能使用表单身份验证。有关更多信息,请参阅使用成员身份管理用户和ASP.NET登录控件概述。

表单身份验证和身份验证服务

您还可以使用ASP.NET身份验证服务将表单身份验证作为Windows Communication Framework(WCF)服务进行访问。身份验证服务使您可以从任何可以发送和使用SOAP格式的消息的应用程序中使用表单身份验证。身份验证服务接受用户凭据并返回表单身份验证cookie。

例如,您可以从未使用.NET Framework开发的应用程序登录用户。有关详细信息,请参阅Windows Communication Foundation身份验证服务概述。

表单身份验证控制流程

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

这里列出一个表格,可以去看看表格:https://docs.microsoft.com/en-us/previous-versions/aspnet/9fw3ef80%28v%3dvs.100%29

表单身份验证凭据

用于在登录时验证用户的表单身份验证凭据可以存储在外部数据源或应用程序配置文件中。

ASP.NET成员资格是在表单身份验证的应用程序中存储和管理用户凭据的首选方法。有关更多信息,请参阅使用成员身份管理用户。

Managing Users by Using Membership.

NET Framework包含一些类和方法,这些类和方法使您能够以编程方式为持久存储创建散列值。一个有助于编程此任务的类是FormsAuthentication类。它的HashPasswordForStoringInConfigFile方法可以进行散列。为了更精确的控制,还可以使用System.Security.Cryptography类。

存储在文本文件中的散列密码不能用于重新生成原始密码,但它们可能容易受到字典攻击。在这种类型的攻击中,攻击者在获得对密码文件的访问权之后,尝试通过使用软件迭代地散列大型字典中的所有单词来猜测密码,并将生成的散列与存储的散列进行比较。如果以任何方式存储散列密码,则应要求用户选择不是常用单词且包含一些数字和非字母数字字符的密码,以帮助防止字典攻击。此外,通过使用ASP.NET成员身份存储凭据,可以更轻松地进行凭据管理。有关更多信息,请参阅使用成员身份管理用户。

Managing Users by Using Membership.

表单身份验证实用程序

要管理表单身份验证,可以使用FormsAuthentication类的静态方法。下表列出了这些方法。

https://docs.microsoft.com/en-us/previous-versions/aspnet/874sbx60%28v%3dvs.100%29

需要对HTTP cookie属性进行详细控制的应用程序可以构造票据并在自定义代码中执行重定向。在这些情况下,您应该使用FormsAuthentication类的加密方法来加密身份验证票据。

处理表单身份验证事件

您可以处理表单身份验证事件以自定义表单身份验证过程的以下方面:

如何创建表单身份验证票证。

如何设置用户属性。

要执行这些任务,可以在应用程序的..asax文件中处理FormsAuthentication_OnAuthenticate事件。通常表单身份验证为您管理这些任务。但是,在应用程序中,您可能具有特定的身份验证要求,例如将User属性设置为实现IPrin.l接口的自定义类。有关更多信息,请参阅FormsAuthenticationEventHandler。

FormsAuthenticationEventHandler.

当通过身份验证服务访问表单身份验证时,可以处理身份验证事件以定制如何验证用户凭据。您可以处理CreatingCookie事件以定制服务返回的身份验证cookie的内容。有关更多信息,请参见如何:在使用WCF身份验证服务时自定义用户登录以及如何:从WCF身份验证服务自定义身份验证Cookie。

https://docs.microsoft.com/en-us/previous-versions/aspnet/467h1csc%28v%3dvs.100%29

跨应用程序表单身份验证

NET支持分布式环境中的表单身份验证,无论是跨单个服务器上的应用程序还是Web场中的应用程序。当跨多个ASP.NET应用程序启用表单身份验证时,在应用程序之间切换时不需要用户重新身份验证

跨应用程序配置表单身份验证

若要跨应用程序配置表单身份验证,请将Web.config文件的表单和machineKey部分的属性设置为参与共享表单身份验证的所有应用程序的相同值。

以下示例显示了Web.config文件的“身份验证”部分。除非另有说明,否则名称,保护,路径,validationKey,validation,decryptionKey和decryption属性在所有应用程序中必须相同。同样,加密和验证密钥值以及用于身份验证票证(cookie数据)的加密方案和验证方案必须相同。如果设置不匹配,则无法共享身份验证票证。有关如何为validationKey和decryptionKey属性生成值的信息,请参见如何:在ASP.NET 2.0中配置MachineKey。 (本主题适用于ASP.NET 2.0及更高版本。)

https://docs.microsoft.com/en-us/previous-versions/aspnet/eb0zx8fc%28v%3dvs.100%29#see-also

ASP.NET Forms身份验证概述的更多相关文章

  1. ASP.NET Forms 身份验证

    ASP.NET Forms 身份验证 在开发过程中,我们需要做的事情包括: 1. 在 web.config 中设置 Forms 身份验证相关参数.2. 创建登录页. 登录页中的操作包括: 1. 验证用 ...

  2. asp.net Forms身份验证详解

    在做网站的时候,都会用到用户登录的功能.对于一些敏感的资源,我们只希望被授权的用户才能够访问,这让然需要用户的身份验证.对于初学者,通常将用户登录信息存放在Session中,笔者在刚接触到asp.ne ...

  3. asp.net Forms身份验证

    Web.config中的配置<system.web><authentication mode="Forms"> <forms name="K ...

  4. 两系统用asp.net forms 身份验证方式实现跨域登录信息共享

    1.两个系统的 web.config 都配置为 forms 验证方式( system.web —> authentication 节点) 2.在两个系统的Web.config里配置相同的 sys ...

  5. 采用Asp.Net的Forms身份验证时,持久Cookie的过期时间会自动扩展

    原文:http://www.cnblogs.com/sanshi/archive/2012/06/22/2558476.html 若是持久Cookie,Cookie的有效期Expiration属性有当 ...

  6. 采用Asp.Net的Forms身份验证时,非持久Cookie的过期时间会自动扩展

    问题描述 之前没有使用Forms身份验证时,如果在登陆过程中把HttpOnly的Cookie过期时间设为半个小时,总会收到很多用户的抱怨,说登陆一会就过期了. 所以总是会把Cookie过期时间设的长一 ...

  7. Asp.Net MVC 身份验证-Forms

    Asp.Net MVC 身份验证-Forms 在MVC中对于需要登录才可以访问的页面,只需要在对应的Controller或Action上添加特性[Authorize]就可以限制非登录用户访问该页面.那 ...

  8. ASP.NET:Forms身份验证和基于Role的权限验证

    从Membership到SimpleMembership再到ASP.NET Identity,ASP.NET每一次更换身份验证的组件,都让我更失望.Membership的唯一作用就是你可以参考它的实现 ...

  9. asp.net的forms身份验证 单用户身份验证

    asp.net的forms身份验证  单用户身份验证 首先要配置Web.config文件 <system.web> <authentication mode="Forms& ...

随机推荐

  1. jQuery hide() 参数callback回调函数执行问题

    $("#b").click(function() { $("div").hide(1000,bbb); //-------------1 bbb是一个函数,但这 ...

  2. mapreduce二次排序详解

    什么是二次排序 待排序的数据具有多个字段,首先对第一个字段排序,再对第一字段相同的行按照第二字段排序,第二次排序不破坏第一次排序的结果,这个过程就称为二次排序. 如何在mapreduce中实现二次排序 ...

  3. PCIE_DMA实例二:xapp1052的EDK仿真

    一:前言 这篇博客是我应一位网友之约写的,他想要学习基于FPGA的PCIe DMA控制器设计,但是手上没有合适的Xilinx开发板,而且xapp1052又没有提供仿真代码,让他的学习陷入了困境.所以我 ...

  4. 20145209刘一阳《JAVA程序设计》第六周课堂测试

    第六周课堂测试 1.现有以下代码,哪些选项插入到第5行可以通过编译?(BDF) 1.import java.util.*; 2. 3.Class FindStuff { 4.public static ...

  5. 【HEOI2016】序列

    题面 题解 很像最长不下降子序列对吧(废话) 设$up[i]$和$down[i]$分别表示$i$最大最小能取多少 注意到: $$ f[i] = max_j\left\{f[j]\right\} + 1 ...

  6. Flutter - 创建横跨所有页面的侧滑菜单

    前一篇博客讲到了如何创建侧滑菜单,但是再实际使用过程中,会发现,这个策划菜单只能在首页侧滑出来. 当导航到其他页面后,侧滑就不管用了.这也有点不符合良好的用户体验设计.Google Play就是很好的 ...

  7. Jsp中格式化时间戳的常用标签

    接下来一段时间的记录,虽然不是一些什么全新的知识,但是作为后台开发人员都是应该必须掌握的前端基础技能,说实话,每一个后台程序员的短板就在于前端技能的弱而造就了不能更上一层楼.从今天开始,我将彻底开启菜 ...

  8. 【敏捷】7.showcase,开发中必须引起重视的小环节

    有人说,测试者来自火星,开发者来自金星.这是因为软件测试员和软件开发者就好比一对冤家,里面的缘由说不清也道不明.开发代表着创造,而测试则代表着摧毁,因为测试的目的就是以各种方式不断地从开发出的产品中发 ...

  9. Kali Linux 下安装中文版输入法

    1.更新软件源: 修改sources.list文件: vim /etc/apt/sources.list 或者 leafpad /etc/apt/sources.list 然后选择添加以下源: deb ...

  10. axios的简单使用

    axios是一个通用的ajax请求库,vue 2.0以后,推荐使用axios Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中. 使用: 1.下载安装 n ...