ASP.NET Internet安全Forms身份验证方法

本文分别以ASP.NET1.1与ASP.NET2.0在Forms 身份验证上的实现方法,以及ASP.NET2.0较上一版本有哪些改进或变化进行说明.相信读者都己经看过许多类似这样的文章,不伦是在网上或是某些专业书籍上,最近又有模式&实践小组成员发布WCF安全模型指南,可见构建网站安全总是不过时的话题,作者认为此文也绝对是您应该收藏的参考资料.

ASP.NET 安全性的工作原理

网站在安全性方面有一个常见的要求:特定的页面仅允许某些成员或其他经过身份验证的用户浏览.充分利用Forms身份验证是最好的方式.
身份验证
从实现机制来说ASP.NET1.1与ASP.NET2.0的安全模型是一致的.首先配置网站为Forms 身份验证模式,之后用户访问网站的URL,Forms 身份验证系统会将未经身份验证的请求重定向到指定的登录页.用户输入凭据(用户名密码)并提交该页.如果验证程序验证用户的身份合法,则系统会向客户端发出一个特定 Cookie(.NET1.1不支持无Cookie模式),它代表用户的身份验证票据.这样后续的请求中,客户端浏览器会把该Cookie一同发送致服务器,如果该Cookie有效则用户通过身份验证并允许对原始请求的资源的访问.
授权
如果用户的请求被验证通过了,但是他请求的URL是否允许用户访问了呢,这就用到了授权.可以通过应用程序配置文件来进行授友也可以在程序中使用代码来验证用户是否有资格访问该资源.如果授权失败,则 ASP.NET 将用户重定向到登录页.如果用户已被授权,则将允许用户访问受保护资源.
ASP.NET1.1实现方式
ASP.NET1.1的实现方式非常简单,不过我们还是需要手写一些代码的,下面我们就一步一步地实现.应用程序配置节的详细说明请参考MSDN相关文档.
l 配置应用程序使用 Forms 身份验证,编辑web.config文件


代码如下:

<configuration>
<system.web>
<authentication mode="Forms">
<forms name=".ASPXCOOKIEAUTH" loginUrl="Login.aspx" protection="All" timeout="30" path="/" />
</authentication>
<authorization>
<deny users="?" /> <!—拒绝匿名 -->
</authorization>
......
</system.web>
<location path="Admin"><!—配置授权,只允许拥有Admins角色的用户访问这个目录下的文件(*.aspx)-->
<system.web>
<authorization>
<allow roles="Admins"/><!—虽然下面配置为拒绝所有用户,但是allow的优先级比deny高.-->
<deny users="*" /><!—拒绝所有用户 -->
<!—
一个用户或角色必须特别指定为拒绝,才能拒绝该用户或角色对URL的权限.如果上面的示例没有指定<deny users="*" />元素,则将允许所有通过身份验证的用户访问所请求的 URL,而不考虑其所属的角色.
-->
</authorization>
</system.web>
</location>
</configuration>

l 创建登录页面Login.aspx
页面预览如下,代码详细参考本文附件的项目源码.

创建用户身份主体
ASP.NET1.1安全模型提供了四种授权方法,这四种方法都使用HttpContext.User对象进行验证授权.
l 使用应用程序配置进行授权,只有具有指定角色的用户才能访问web.config所在的文件夹与子文件夹
<authorization>
<allow roles="Admins"/>
<deny users="?"/>
</authorization>
l 使用PrinciplePermissionAttribute控制对类和方法的访问,只允许角色为Admins的成员才能调用该方法
[System.Security.Permissions.PrincipalPermission(System.Security.Permissions.SecurityAction.Demand,Role=” Admins”)]
public static bool MethodName()
{
...
}
l 以编程方式使用PrinciplePermission类控制对代码块的访问,只允许角色为Admins的成员调用Demand之后的代码
public static bool MethodName()
{
System.Security.Permissions.PrincipalPermission perm = new System.Security.Permissions.PrincipalPermission(null, "Admins");
perm.Demand();
...
}
l 使用Iprincipal.IsInRole方法,只允许角色为Admins的成员运行if中的代码,大部分情况我们都使用这种方法判断用户是否有权限.
public static bool MethodName()
{
if (HttpContext.Current.User.IsInRole("Admins"))
{
//some code
}
}
针对以上的特点,程序员必须在合适的地方创建HttpContext.User对象,以达到验证模型的要求.开发人员必须编写HttpApplication:: AuthenticateRequest事件.该事件的发生代表着用户己经通过Forms身份验证.
在Global.asax中实现Application_AuthenticateRequest.
protected void Application_AuthenticateRequest(Object sender, EventArgs e)
{
HttpApplication app = (HttpApplication)sender;
HttpCookie cookie = Request.Cookies[FormsAuthentication.FormsCookieName];
if (cookie != null)
{
string encryptedTicket = cookie.Value;
FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(encryptedTicket);
//获取在登录验证时加入验证票据的用户所拥有的角色,但真正开发时请不这样做,建议从数据库中获取该用户角色信息.
//因为Cookie本身有长度的限制,并且将用户角色存储到客户端也不是安全的行为.
//大家想想如果Cookie不限制大小,那么它的尺寸大到几MB或GB时,客户端与服务器的每一次通迅,将是怎样的一种情况了,呵呵.
//这里仅展示如何将角色信息加入到用户主体GenericPrincipal中.
string[] roles = ticket.UserData.Split(new char[] { ',' });//获取角色
FormsIdentity identity = new FormsIdentity(ticket);
System.Security.Principal.GenericPrincipal user = new System.Security.Principal.GenericPrincipal(identity, roles);
app.Context.User = user;
//app.Context.User = new System.Security.Principal.GenericPrincipal(new System.Web.Security.FormsIdentity(FormsAuthentication.Decrypt(cookie.Value)), new string[]{"Admins"});
}
}
或者在Global.asax中实现FormsAuthentication_Authenticate效果是一样的.
void FormsAuthentication_OnAuthenticate(object sender, FormsAuthenticationEventArgs e)
{
HttpCookie cookie = Request.Cookies[FormsAuthentication.FormsCookieName];
if (cookie != null)
{
string encryptedTicket = cookie.Value;
FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(encryptedTicket);
string[] roles = ticket.UserData.Split(new char[] { ',' });
FormsIdentity identity = new FormsIdentity(ticket);
System.Security.Principal.GenericPrincipal user = new System.Security.Principal.GenericPrincipal(identity, roles);
e.Context.User = user;
}
}
其实FormsAuthenticationModule会自动生成一个User对象,只不过这个对象的角色列表为空,它只能是代表通过身份验证,而不能通过授权,因为我们限制了目录的访问角色,所以开发人员必须实现上面代码,才能满足我们的要足,如果说你的网站仅需要通过身份验证的话,就可不必实现这些方法了.
用户在请求URL时,ASP.NET请求通道会连续触发一堆的事件,这些事件完成了一系列任务,其中就包括Forms身份验证事件与授权事件.如下所示:
BeginRequest 请求开始事件
AuthenticateRequest 验证通过事件 (上面两段代码就是在这个事件中被执行)
PostAuthenticateRequest 用户标识己建立时发生 ASP.NET 2.0引入的事件,后面会讲到.
AuthorizeRequest 当安全模块已验证用户授权时发生
....其它事件略;
正是这些事件的垒加促成了ASP.NET框架验证模型的实现, 而且通过完成上面的几个步骤,网站内容就己经受到授权机制的保护了.
下面让我们看看ASP.NE安全模型是如何做到授权的.
l ASP.NET 1.1 安全模型验证授权的原理
在 ASP.NET 中,有两种方式限制对资源访问的权限:文件授权与URL 授权,这里我们仅讨伦后者.
URL 授权由 UrlAuthorizationModule 执行,它将用户和角色映射到 ASP.NET 应用程序中的 URL.这个模块可用于有选择地允许或拒绝特定用户或角色对应用程序的任意部分(通常在web.config文件中为目录指定授权用户或角色)的访问权限.
HTTP模块是在ASP.NET框架默认应用程序配置文件中注册的,如下:


下面简单分析UrlAuthorizationModule的源码,便可了解验证模型是如何验证在web.config中指定的授权规则.

UrlAuthorizationModule在应用程序初始化时向HttpApplication::AuthorizeRequest事件(安全模块已验证用户授权时发生)注册委托代码,该代码内部调用AuthorizationConfig::IsUserAllowed.方法实现截图如下:

上面代码又调用了AuthorizationConfigRule::IsUserAllowed方法,截图如下:

由于HttpApplication::AuthorizeRequest事件是在HttpApplication::AuthenticateRequest事件之后执行的(请看我提到过的事件列表), 在前面介绍的AuthenticateRequest事件中我们修改了Context.User对象,而且加入了角色信息,所以AuthorizeRequest事件在验证用户的权限时发现Context.User对象中什么都有,所以它才允许用户访问请求的资源,否则请求将被返回到指定的页面.以上就是ASP.NET1.1的原理,怎么样你理解了吗?

ASP.NET2.0你仍可以用这样的机制,但又增加新特性.下面就看看在ASP.NET2.0中是如何实现的吧!

ASP.NET 2.0 实现方式

ASP.NET2.0的实现方式与ASP.NET1.1实现方式大同小异,同样支持前一版本的安全模型.不过又新增了成员资格与角色管理授权模型.这里就介绍ASP.NET2.0新增的内容.

l         应用程序配置新增属性

<system.web>

<authentication mode="Forms">

//defaultUrl是ASP.NET2.0版本新增的属性, 在验证模型重定向URL时将重定向到的URL.默认值为"default.aspx".

//虽然ASP.NET1.1版本没有该属性,但程序中的默认为"default.aspx".还是ASP.NET2.0的配置更为灵活.

<forms loginUrl="logon.aspx" protection="All" name=".ASPXFORMSAUTH" path="/" defaultUrl="Index.aspx"></forms>

</authentication>

<authorization>

<deny users="?" />/*匿名用户*/

</authorization>

</system.web>

l         使用成员资格验证登录

ASP.NET 成员资格主要用于ASP.NET Forms 身份验证,配合ASP.NET2.0登录控件可以不用写任何代码就能实现Forms身份验证.

首先创建登录页Login.aspx,将登录控件托入到窗体中即可,不用写任何登录事件代码,相比ASP.NET1.1节省时间不是一点半点.

l         使用角色管理进行访问授权

角色管理可以帮助您管理授权,使您能够指定应用程序中的用户可访问的资源.角色管理可让您通过将用户分配到相应角色来对其进行分组,从而更容易控制访问权限.

1.         启用角色管理

要启用该功能,修改web.config文件在<system.web>配置节点内增加子节点如下:

<roleManager enabled="true" cacheRolesInCookie="true" />

cacheRolesInCookie属性代表是否缓存角色信息,这样不用每次都从数据库中获取角色,以提高应用程序的性能.

但是将角色放在Cookie里总是风险的,它可能被篡改,然后用它访问未被授权的资源.

不过可以在用户每次登录时,先使用Role API的DeleteCookie方法删除这个缓存Cookie, 这样可使风险小一点.

推荐代码:

if(Membership.ValidateUser(username, password)){

Roles.DeleteCookie();

FormsAuthentication.RedirectFromLoginPage(username, false);

}

特别提示:应用程序配置中当角色管理可用并且提供者程序为AspNetSqlProvider时, SqlRoleProvider的GetRolesForUser方法会调用System.Web.DataAccess.SqlConnectionHelper类的私有静态方法EnsureSqlExpressDBFile创建一个空的aspnetdb.mdf本地数据库,该数据库包含成员资格与角色管理,所需要的表结构等信息.

2.         配置成员与角色

使用VS2008自带的配置工具设定成员与角色是最简单不过的了,点击菜单栏中的[项目],下拉菜单的最后一项[ASP.NET配置],在弹出窗体中设置成员与角色关系.如下图展示:

在安全选项卡内有管理用户与角色的内容,如下图:

本示例创建了一个用户”iori”与一个角色”Admins”,并且指定了该用户是Admins角色的成员.

另外该工具还会自动创建本地数据库(如果还没创建).与它相关的配置在machine.config文件中指定,如下图所示,你可以更改数据库的文件名,默认为”aspnetdb.mdf”.

好了,通过完成上面的几个步骤,网站内容就己经受到授权机制的保护了,可以用刚刚添加的用户试试登录吧.

相比上一版本,ASP.NET2.0在Forms身份验证里为开发人员节省很多时间,几乎不用开发人员写任何代码,方便了许多,下面让我们一探究竟.

l         ASP.NET 2.0 安全模型验证授权的原理

1.          验证原理

在.net1.1中开发人员必须为登录页编写登录事件,用来验证用户输入的用户名与密码是否有效,而ASP.NET 2.0中引入了成员资格提供程序与标准登录服务器控件,它们隐式使用Forms 身份验证,登录控件己经包含了验证用户名的程序逻辑,也就是说登录控件会把用户输入的用户名与密码自动与成员资格数据库中的用户进行匹配,如果成功匹配就将特定Cookie写入客户端.

2.         授权原理

还是拿UrlAuthorizationModule说事儿, 如果不启用角色管理,实现方式与ASP.NET1.1差不多,不过由于ASP.NET2.0加入了角色管理模型,角色管理模型使用两个类: RolePrincipal与RoleManagerModule来实现角色授权.如果应用程序配置的角色管理可用时,这两个新对象将被应用到aspx页面的生命周期中, 由于RoleManagerModule 被初始化时会向HttpApplication对象的事件PostAuthenticateRequest加载委托代码,该代码会将app.Context.User对象包装成RolePrincipal对象.

PostAuthenticateRequest事件是在ASP.NET 2.0中加入的,该事件发生在AuthenticateRequest事件之后,代表安全模块已建立了用户标识,所以在这个事件中使用用户标识重新生成RolePrincipal对象.

下面为委托代码的节选.

......//省略若干代码

HttpApplication application = (HttpApplication) source;

HttpContext context = application.Context;

if (this._eventHandler != null)

{

RoleManagerEventArgs e = new RoleManagerEventArgs(context);

this._eventHandler(this, e);

if (e.RolesPopulated)

{

//判断开发人员是否在Global.asax中写了事件处理程序,如下显示的代码.

/*

//这里演示如何在Global.asax中自定义角色

void RoleManager_GetRoles(object sender, RoleManagerEventArgs e)

{

if (e.Context.Request.IsAuthenticated)

{

e.Context.User = new GenericPrincipal(new GenericIdentity(e.Context.User.Identity.Name), new string[] { "Admins" });

e.RolesPopulated = true;

}

}

*/

//如果e.RolesPopulated为真,代表开发人员自己创建了角色信息,

//RoleManagerModule就不会 生成RolePrincipal 对象了.

return;

}

}

......

if (!(context.User is RolePrincipal))

{

context.User = new RolePrincipal(context.User.Identity);

}

Thread.CurrentPrincipal = context.User;

注意:我们并没有像ASP.NET1.1中那样在AuthenticateRequest事件中生成User对象.但是User对象会在FormsAuthenticationModuleHTTP模块中使用Forms身份验证的特定Cookie重新被包装成一个GenericPrincipal对象(角色为空).

在说明RolePrincipal对象有什么用之前,需要了解这个对象是何时被用到的.

在UrlAuthorizationModule被初始化时中向HttpApplication对象注册的事件AuthorizeRequest被触发.
在这个事件中会调用RolePrincipal对象(就是Context.User)的方法IsInRole, IsInRole方法会自动查找角色提供程序(本示例使用默认提供程序AspNetSqlProvider,数据库为前面自动生成的ASPNETDB.MDF),并验证用户角色,代码截图如下:

而IsUserAllowed方法最终会调用RolePrincipal对角的IsInRole方法来判断当前用户是否拥有某角色,方法截图如下:

以上这些便是ASP.NET2.0成员资格与角色管理实现Forms身份验证的原理与实现,不过默认的成员资格与角色数据库的字段一般并不能满足具体项目的需要.好在ASP.NET 2.0中提供了可扩展提拱程序模型,开发人员可以定制成员资格提供程序与角色管理模型.

结束语

网站应用程序的身份验证和授权方法是一项具有挑战性的任务,而Forms身份验证在网站建设中提供了重要的安全性优势,通过提供用户配置文件以及对角色的支持, 简化了程序员通常需要编写大量代码才能完成的工作.如果读者还有什么问题或者对以上描述有不同的见解,欢迎与我联系互相交流!

(0)

相关推荐

  • ASP.net 验证码实现代码(C#)

    public class ValidateCode : System.Web.UI.Page {   private void Page_Load(object sender, System.EventArgs e)   {    this.CreateCheckCodeImage(GenerateCheckCode());   }   #region Web 窗体设计器生成的代码   override protected void OnInit(EventArgs e)   {    //  

  • Asp.net页面中调用soapheader进行验证的操作步骤

    本文为大家分享了Asp.net页面中调用以SOAP头作验证的web services操作步骤,供大家参考,具体内容如下 第一步:用来作SOAP验证的类必须从SoapHeader类派生,类中Public的属性将出现在自动产生XML节点中,即: <soap:Header> <UserSoapHeader xmlns="http://tempuri.org/"> <UserName>string</UserName> <Pwd>st

  • asp.net中的窗体身份验证(最简单篇)

    在创建网站中,常常会使用到身份验证.asp.net中内置了几种身份验证的方式,如Windows.Froms.Passport等.这几种身份验证的方式各有不同.一般来说,网站的身份验证方式都会经过以下几个步骤: 1.输入用户名和密码,单击确定按钮. 2.在后台判断用户名和密码是否正确,如果错误返回提示:如果正确,进入可访问的页面. 在ASP时代,通常都会在验证用户名和密码是否匹配之后,创建一个Session,然后在每个需要验证的页面中判断Session是否存在,如果存在,则显示页面内容:如果不存在

  • ASP.NET MVC5添加验证(4)

    有时候我们网站需要添加验证,这一节我们演示下怎样使用ASP.NET MVC5添加验证. 1.在Model类里面添加验证,代码如下: public class Movie { public int ID { get; set; } [StringLength(60,MinimumLength=3,ErrorMessage="主题的长度必须在3到60个字符")] public string Title { get; set; } [Display(Name="Release Da

  • 详解ASP.NET MVC Form表单验证

    一.前言 关于表单验证,已经有不少的文章,相信Web开发人员也都基本写过,最近在一个个人项目中刚好用到,在这里与大家分享一下.本来想从用户注册开始写起,但发现东西比较多,涉及到界面.前端验证.前端加密.后台解密.用户密码Hash.权限验证等等,文章写起来可能会很长,所以这里主要介绍的是登录验证和权限控制部分,有兴趣的朋友欢迎一起交流. 一般验证方式有Windows验证和表单验证,web项目用得更多的是表单验证.原理很简单,简单地说就是利用浏览器的cookie,将验证令牌存储在客户端浏览器上,co

  • ASP.NET窗体身份验证详解

    asp.net的身份验证类型如下: 在我们实际的工作中,froms身份验证用的还是比较多的,我们接下来详细说一下: 做为web开发的程序员,我想登录窗体是接触的太多了.可是,我发现有的程序员在对身份验证的时候是把验证的用户名保存在一个session里的,然后进入系统的每个页面都去验证session是否为空,如果不为空那么就response.redirect("......aspx").  我认为这种方法相对于asp.net提供的form身份验证来说是不足的,首先,就是增加代码量,因为我

  • 验证一个ASP.NET应用程序和页面的生命周期的实现代码

    如果我们能更好地掌握这样一个过程,那么对单个ASP.NET Page的生命周期也能更好地了解: 下面介绍如何编写一个简单的ASP.NET 页面和一个简单的HttpModule,对MSDN里提到的ASP.NET的生命周期进行验证 1. 首先使用Visual Studio 2010建立一个空的ASP.NET网站 (ASP.NET 4.0) 2. 添加一个Default.aspx,添加三个ASP.NET控件,分别为TextBox,Button和Validator: 复制代码 代码如下: <form i

  • ASP.NET MVC4入门教程(六):验证编辑方法和编辑视图

    在本节中,您将开始修改为电影控制器所新加的操作方法和视图.然后,您将添加一个自定义的搜索页. 在浏览器地址栏里追加/Movies, 浏览到Movies页面.并进入编辑(Edit)页面. Edit(编辑)链接是由Views\Movies\Index.cshtml视图中的Html.ActionLink方法所生成的: @Html.ActionLink("Edit", "Edit", new { id=item.ID }) Html对象是一个Helper, 以属性的形式,

  • ASP.NET通用权限验证的实现代码思路

    本篇介绍通用权限验证的实现代码思路,总共分为导入参数.解析XML.根据XML配置进行处理.返回结果. 代码架构图 一. 类介绍 1.SFWebPermission:实现IHttpModule接口,权限验证入口: 2.SFConfig:导入XML配置类: 3.SFPermission:解析XML配置进行权限验证: 4.SFAccessOper:数据库操作类: 5.SFPermissionSQL:XML节点实体类: 6.SFParameter:XML节点实体类: 7.SFCommon:系统变量定义类

  • ASP.NET Internet安全Forms身份验证方法

    本文分别以ASP.NET1.1与ASP.NET2.0在Forms 身份验证上的实现方法,以及ASP.NET2.0较上一版本有哪些改进或变化进行说明.相信读者都己经看过许多类似这样的文章,不伦是在网上或是某些专业书籍上,最近又有模式&实践小组成员发布WCF安全模型指南,可见构建网站安全总是不过时的话题,作者认为此文也绝对是您应该收藏的参考资料. ASP.NET 安全性的工作原理 网站在安全性方面有一个常见的要求:特定的页面仅允许某些成员或其他经过身份验证的用户浏览.充分利用Forms身份验证是最好

  • asp.net mvc中Forms身份验证身份验证流程

    验证流程 一.用户登录 1.验证表单:ModelState.IsValid 2.验证用户名和密码:通过查询数据库验证 3.如果用户名和密码正确,则在客户端保存Cookie以保存用户登录状态:SetAuthCookie     1):从数据库中查出用户名和一些必要的信息,并把额外信息保存到UserData中 2):把用户名和UserData保存到 FormsAuthenticationTicket 票据中 3):对票据进行加密 Encrypt 4):将加密后的票据保存到Cookie发送到客户端 4

  • 浅谈asp.net Forms身份验证详解

    在做网站的时候,都会用到用户登录的功能.对于一些敏感的资源,我们只希望被授权的用户才能够访问,这让然需要用户的身份验证.对于初学者,通常将用户登录信息存放在Session中,笔者在刚接触到asp.net的时候就是这么做的.当我将用户信息存在在Session中时,常常会遇到Session丢失导致用户无法正常访问被授权的资源,保持用户登录状态时的安全性问题,无休其实,在asp.net中,我们有更好的解决方案,那就是通过Forms身份验证,从而对用户进行授权,这种方法可以轻松的保持用户的登录状态(如果

  • Asp.Net二级域名共享Forms身份验证、下载站/图片站的授权访问控制

    一般大家对小文件的解决办法是直接在服务端读取文件,然后输出,这样就避免了文件地址的暴露,这是一种解决办法.而我现在想说的是使用 TransmitFile 方法直接输出文件,但是这个方法对大文件的支撑力度有多少,以及会带来多大的性能开销,我还没有测试过,有兴趣的朋友可以测试下,并发表评论. 好了,进入正题,一般对下载站,大家想到的就是流量的问题,所以自动就想到应该把文件与程序代码分开部署.所以我给文件单独做了一个二级域名,我们就叫 file.xxx.com 吧.主网站域名就是 www.xxx.co

  • asp.net Forms身份验证和基于角色的权限访问

    主要思想:Forms身份验证用来判断是否合法用户,当用户合法后,再通过用户的角色决定能访问的页面. 具体步骤:     1.创建一个网站,结构如下:         网站根目录             Admin目录            ---->    管理员目录                 Manager.aspx        ---->    管理员可以访问的页面             Users目录            ---->    注册用户目录         

  • asp.core 同时兼容JWT身份验证和Cookies 身份验证两种模式(示例详解)

    在实际使用中,可能会遇到,aspi接口验证和view页面的登录验证情况.asp.core 同样支持两种兼容. 首先在startup.cs 启用身份验证. var secrityKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Configuration["SecurityKey"])); services.AddSingleton(secrityKey); services.AddAuthentication(CookieAut

  • Java JWT实现跨域身份验证方法详解

    目录 1.JWT简介 2.JWT的结构 2.1 头部(header) 2.2 载荷(payload) 2.3 签证(signature) 3.JWT的原则 4.JWT的用法 5.JWT的问题和趋势 6.整合JWT令牌 6.1 在模块中添加jwt工具依赖 6.2 创建JWT工具类 1.JWT简介 JWT(JSON Web Token)是目前流行的跨域认证解决方案,是一个开放标准(RFC 7519),它定义了一种紧凑的.自包含的方式,用于作为JSON对象在各方之间安全地传输信息.该信息可以被验证和信

  • asp.net forms身份验证,避免重复造轮子

    问题:大家都说使用 forms 验证无法得到当前登录用户除了用户名之外的更多信息,经过我的一番小试验,在 forms 方式下自带的 userdata 可以为我们施展天地的地方.下面记录一下我的操作步骤备忘. step 1: web.config 配置关键地方: web.config配置 复制代码 代码如下: <!-- 通过 <authentication> 节可以配置 ASP.NET 用来 识别进入用户的 安全身份验证模式. --> <authentication mode=

  • asp.net中几种常用的身份验证方法总结

    前言 在B/S系统开发中,经常需要使用"身份验证".因为web应用程序非常特殊,和传统的C/S程序不同,默认情况下(不采用任何身份验证方式和权限控制手段),当你的程序在互联网/局域网上公开后,任何人都能够访问你的web应用程序的资源,这样很难保障应用程序安全性.通俗点来说:对于大多数的内部系统.业务支撑平台等而言,用户必须登录,否则无法访问和操作任何页面.而对于互联网(网站)而言,又有些差异,因为通常网站的大部分页面和信息都是对外公开的,只有涉及到注册用户个人信息的操作,或者网站的后台

随机推荐