表单身份验证允许您使用自己的代码对用户进行身份验证,然后在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. 探索photo-sphere-viewer全景插件

    此插件是一位外国人写的,官网API地址:https://photo-sphere-viewer.js.org/#methods 我只是记录下我在使用此插件时用到的方法和相关属性,以防以后忘记 1.按要 ...

  2. 大数据入门第七天——MapReduce详解(一)入门与简单示例

    一.概述 1.map-reduce是什么 Hadoop MapReduce is a software framework for easily writing applications which ...

  3. mysql 5.7.12 winx64安装配置方法图文教程

    这篇文章主要为大家分享了mysql 5.7.12winx64安装配置方法图文教程,感兴趣的朋友可以参考一下   之前安装mysql时未做总结,换新电脑,补上安装记录,安装的时候,找了些网友的安装记录, ...

  4. 2017-2018-1 20155320第十周课下作业-IPC

    2017-2018-1 20155320第十周课下作业-IPC 研究Linux下IPC机制:原理,优缺点,每种机制至少给一个示例,提交研究博客的链接 共享内存 管道 FIFO 信号 消息队列 共享内存 ...

  5. 2017-2018-2 20155327『网络对抗技术』Exp5:MSF基础应用

    2017-2018-2 20155327『网络对抗技术』Exp5:MSF基础应用 基础问题回答 用自己的话解释什么是exploit,payload,encode exploit:使用者利用漏洞进行攻击 ...

  6. bzoj1043 [HAOI2008]下落的圆盘

    Description 有n个圆盘从天而降,后面落下的可以盖住前面的.求最后形成的封闭区域的周长.看下面这副图, 所有的红色线条的总长度即为所求. Input 第一行为1个整数n,N<=1000 ...

  7. 5-[HTML]-body常用标签2

    1.表格标签 table 表格由<table> 标签来定义.每个表格均有若干行(由 <tr> 标签定义),每行被分割为若干单元格(由<td>标签定义).字母 td ...

  8. burp抓取手机包

    burp监听ip和端口要填对应的使用的ip,比如建立了一个网卡wifi,那就填那个ip 手机代理连接wifi的话,就直接先看能不能访问burp监听的端口,然后填上相同代理即可.

  9. spring源码学习(一):eclipse导入spring源码

    前言 对于一门技术,我们最先是了解它(what),然后再熟练的使用它(how)以及何时用它(when),最后肯定要看透它(why).spring作为Java开发人员可以说是最熟悉不过的了,基本每个Ja ...

  10. 彻底搞清楚python字符编码

    在讨论python编码之前,我先了解了几种编码的由来. 一.编码类型 1.ascci码 ascci码由美国人发明,用1个字节(byte)存储英文和字符,前期用了128个,后来新加了其他欧洲国家的符号, ...