表单身份验证允许您使用自己的代码对用户进行身份验证,然后在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. html移动应用 input 标签 清除按钮功能如何实现(不触发键盘)

    有个需求是:输入框有文本的时候就显示清除按钮,没有文本则隐藏清除按钮,点击清除按钮不能影响键盘弹出的状态. 网上有css实现自动显示和隐藏清除按钮的方案,但是考虑到兼容性,我们还是使用js来实现. c ...

  2. 【转】SQL中的锁、脏读、不可重复的读及虚读

    原文:http://blog.csdn.net/wjeson/article/details/9382067 锁的概述 一. 为什么要引入锁 多个用户同时对数据库的并发操作时会带来以下数据不一致的问题 ...

  3. 苏州Uber优步司机奖励政策(4月24日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  4. 07 -模型层ORM

    1.orm简介 2. models.py from django.db import models # Create your models here. class Book(models.Model ...

  5. 洛谷 P4478 [BJWC2018]上学路线

    洛谷 P4478 [BJWC2018]上学路线 原题 神仙题orz,竟然没有1A....容斥+卢卡斯+crt?? 首先用容斥做,记\(f[i][0/1]\)表示到i号点经过了奇数/偶数个点的方案数,因 ...

  6. USACO Section1.1

    本系列博客主要学习和记录USACO的相关代码和总结,附上我的github地址. 什么是USACO USACO全称是The USA Computing Olympiad,主要目的是从美国高中生中选出代码 ...

  7. 如何实现Canvas图像的拖拽、点击等操作

    上一篇Canvas的博文写完后,有位朋友希望能对Canvas绘制出来的图像进行点击.拖拽等操作,因为Canvas绘制出的图像能很好的美化.好像是想做炉石什么的游戏,我也没玩过. Canvas在我的理解 ...

  8. Linux shell 编写(2)

    shell脚本中变量的定义和使用: 1.shell中变量名可以由字母,数字,下划线组成,但数字不能作为变量名的第一个字符. 2.通过赋值符号"="来定义一个变量 如:myname= ...

  9. Git积累

    1.使用git config命令进行配置(此配置为全局配置,这些是在提交commit时的签名): $ git config --global user.name "填写github的用户名& ...

  10. Django中settings设计模式(单例模式)

    配置文件: 需求:配置文件,默认配置和手动配置分开,参考django的配置文件方案,默认配置文件放在项目容器内部,只让用户做常用配置. /bin/settings.py(手动配置) PLUGIN_IT ...