表单身份验证允许您使用自己的代码对用户进行身份验证,然后在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. 关于redis常用命令

    加载redis.cof文件命令: redis-server /etc/redis/redis.conf启动redis命令: redis-cli -p 6379 关于key命令:keys * //查看所 ...

  2. Vue Router的入门以及简单使用

    Vue Router 是Vue官方的路由管理器,是Vue用来实现SPA的插件.它和 Vue.js 的核心深度集成,让构建单页面应用(SPA)变得易如反掌. 基本概念: 路由:是一种映射关系,是 “pa ...

  3. 20155235 《网络攻防》 实验一 逆向及Bof基础实践说明

    20155235 <网络攻防> 实验一 逆向及Bof基础实践说明 实验目的 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函 ...

  4. 20155327 2017-2018-2 《Java程序设计》第一周学习总结

    20155327 2017-2018-2 <Java程序设计>第一周学习总结 教材学习内容总结 三大平台: 1.Java SE:JVM,JRE,JDK,java语言 JVM:Java虚拟机 ...

  5. JavaScript总结(七)

    JavaScript表单编程 表单是Web上与用户进行交互的主要界面.则我们需要掌握如何访问用户输入的表单数据,校验用户输入的正确性显得至关重要. ♞ 对Form元素进行脚本编写 ✍ 获取表单的应用 ...

  6. 如何启动 EDB*Plus

    磨砺技术珠矶,践行数据之道,追求卓越价值 回到上一级页面: PostgreSQL基础知识与基本操作索引页     回到顶级页面:PostgreSQL索引页 由于EnterpriseDB公司的网站上讲的 ...

  7. 【转载】特殊宏://{{AFX_MSG、//{{AFX_VIRTUAL、//{{AFX_MSG_MAP、//{{AFX_DATA_INIT

    原文:http://yyguangzheng.blog.163.com/blog/static/603488402014102215153610/ 说明:这篇日志我不知道怎么命名好,虽然内容很少,但是 ...

  8. P2167 [SDOI2009]Bill的挑战

    sb状压dp. 设f[i][j]表示字符串前i位和集合为j的串匹配的方案数. 枚举哪个字母直接转移就好了. (话说为啥这种水题都有紫色难度 #include<bits/stdc++.h> ...

  9. [BZOJ4883][Lydsy1705月赛]棋盘上的守卫[最小基环树森林]

    题意 有一大小为 \(n*m\) 的棋盘,要在一些位置放置一些守卫,每个守卫只能保护当前行列之一,同时在每个格子放置守卫有一个代价 \(w\) ,问要使得所有格子都能够被保护,需要最少多少的代价. \ ...

  10. ModelForm解密

     一.复用model表和字段 models.py文件 class User(models.Model): username = models.CharField(max_length=32) emai ...