钱李峰 的这篇博文《Asp.net中的认证与授权》已对Asp.net 中的身份验证进行了不错实践。而我这篇博文,是从初学者的角度补充了一些基础的概念,以便能有个清晰的认识。

一、配置安全身份验证模式

在Web.config 文件中,通过 <authentication> 节可以配置 ASP.NET 使用的安全身份验证模式,以标识传入的用户。

 <authentication mode="[Windows|Forms|Passport|None]">
<forms>...</forms>
<passport/>
</authentication>

<authentication> 节的mode 为必选的属性。指定应用程序的默认身份验证模式。

此属性可以为下列值之一:

○  Windows :将 Windows 验证指定为默认的身份验证模式。将它与以下任意形式的 Microsoft Internet 信息服务 (IIS) 身份验证结合起来使用:基本、摘要、集成 Windows 身份验证 (NTLM/Kerberos) 或证书。在这种情况下,您的应用程序将身份验证责任委托给基础 IIS。

○  Forms :将 ASP.NET 基于窗体的身份验证指定为默认身份验证模式。

○  Passport :将 Microsoft Passport Network 身份验证指定为默认身份验证模式。

○  None :不指定任何身份验证。您的应用程序仅期待匿名用户,否则它将提供自己的身份验证。

默认值为 Windows

二、设置基于窗体的身份验证

当ASP.NET 基于窗体的身份验证<authentication mode="Forms"> 时,其<forms> 子节点为窗体自定义身份验证配置。

示例如下:

<authentication mode="Forms">
<forms cookieless="UseDeviceProfile"
defaultUrl="Default.aspx"
loginUrl="Login.aspx"
name="cnblogs"
slidingExpiration="false"
timeout="15"
/>
</authentication>

○  cookieless :定义是否使用 Cookie 以及 Cookie 的行为。默认值为 UseDeviceProfile ;

○  defaultUrl :定义在身份验证之后用于重定向的默认 URL。默认值为 default.aspx ;

○  loginUrl :指定如果找不到任何有效的身份验证 Cookie,将请求重定向到的用于登录的 URL。默认值为 login.aspx ;

○  name :指定要用于身份验证的 HTTP Cookie。默认值为 ".ASPXAUTH" ;

如果正在一台服务器上运行多个应用程序,并且每个应用程序都需要唯一的Cookie,则必须在每个应用程序的 Web.config 文件中配置 Cookie 名称。

○  slidingExpiration :指定是否启用弹性过期时间。

       > True 指定启用弹性过期时间。在单个会话期间,身份验证 Cookie 被刷新,并且每个后续请求的到期时间被重置。在 .NET Framework 1.x 版中,默认值为 True

       >  False 指定不启用可调过期,并指定 Cookie 在最初发出之后,经过一段设定的时间间隔后过期。在 .NET Framework 2.0 版中,默认值为 False

○  timeout :指定 Cookie 过期前逝去的时间(以整数分钟为单位)。如果 SlidingExpiration 属性为 true,则 timeout 属性是滑动值,会在接收到上一个请求之后的指定时间(以分钟为单位)后过期。为防止危及性能并避免向开启 Cookie 警告的用户发出多个浏览器警告,当指定的时间逝去大半时将更新 Cookie。这可能导致精确性受损。持久性 Cookie 不超时。默认值为 "30"(30 分钟)。

三、配置 Web 应用程序的授权

接下来添加<authorization> 节配置 Web 应用程序的授权,以控制客户端对 URL 资源的访问。

<authorization>
<allow ...="" />
<deny ...="" />
</authorization>

<authorization> 授权:顺序是先写allow,再写deny,不然就会出现问题。

allow :向授权规则映射添加一个规则,该规则允许对资源进行访问。

deny :向授权规则映射添加一条拒绝对资源的访问的授权规则。

示例如下:

<authorization>
<deny users="?" />
</authorization>

<deny  users="?" />  表示拒绝访问的用户。问号 (?) 表示拒绝匿名用户;星号 (*) 表示拒绝所有用户访问。若添加用户名列表使用逗号分隔。

设置完毕后,Web.config 文件的整体配置如下:

<!--
通过 <authentication> 节可以配置 ASP.NET 使用的
安全身份验证模式,以标识传入的用户。
-->
<authentication mode="Forms">
<forms cookieless="UseDeviceProfile"
defaultUrl="Default.aspx"
loginUrl="Login.aspx"
name="newerSize"
slidingExpiration="false"
timeout="15"
/>
</authentication>
<!-- <authorization>授权:顺序是先写allow,再写deny,不然就会出现问题。 -->
<authorization>
<deny users="?"/>
</authorization>

四、在页面程序中使用Forms 身份验证

在页面程序的后台代码中,我们使用FormsAuthentication 类为Web 应用程序管理 Forms 身份验证服务。

在登录页面Login.aspx 中,代码如下:

//登录
protected void btnLogin_Click(object sender, EventArgs e)
{
string name = txtName.Text.Trim();
string pwd = txtPwd.Text.Trim();
if ("Andy" == name && "123" == pwd)
{
//方式一
//FormsAuthentication.RedirectFromLoginPage(name, true);
/*参数二为true:表示创建持久 Cookie(跨浏览器会话保存的 Cookie)*/
//方式二
//为用户创建一个票证,并将其放入cookie或者url中(具体看你怎么设置票证的保存方式)
FormsAuthentication.SetAuthCookie(name, true);
Response.Redirect("Default.aspx");
}
else
{
Response.Write("<script>alert('登录失败!')</script>");
}
}
//注销
protected void btnExit_Click(object sender, EventArgs e)
{
//从浏览器删除 Forms 身份验证票证。
FormsAuthentication.SignOut();
}

登录成功后,跳转到的默认页面Default.aspx 中,代码如下:

protected void Page_Load(object sender, EventArgs e)
{
//User:获取有关发出页请求的用户的信息。
string username = User.Identity.Name;
Label1.Text = username + ":登录成功!";
}

User.Identity.Name 用于获得Cookie 中的用户名。

也谈Asp.net 中的身份验证的更多相关文章

  1. 利用.net的内部机制在asp.net中实现身份验证

    知识点: 在ASP.NET中,任何页面都是继承于System.Web.UI.Page,他提供了Response,Request,Session,Application的操作.在使用Visual Stu ...

  2. ASP.NET中的身份验证有那些?你当前项目采用什么方式验证请解释

    ASP.NET身份验证模式包括Windows.Forms(窗体).Passport(护照)和None(无). l  Windows身份验证—常结合应用程序自定义身份验证使用使用这种身份验证模式时,AS ...

  3. ASP.NET中的身份验证

    身份验证方式windows passport form none授权allow 允许deny 拒绝特殊符号 *代表所有用户 ?代表匿名用户跳转配置<system.web><autho ...

  4. 从零搭建一个IdentityServer——聊聊Asp.net core中的身份验证与授权

    OpenIDConnect是一个身份验证服务,而Oauth2.0是一个授权框架,在前面几篇文章里通过IdentityServer4实现了基于Oauth2.0的客户端证书(Client_Credenti ...

  5. ASP.NET Web API身份验证和授权

    英语原文地址:http://www.asp.net/web-api/overview/security/authentication-and-authorization-in-aspnet-web-a ...

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

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

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

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

  8. [转]Reporting Services 中的身份验证类型

    本文转自:https://docs.microsoft.com/zh-cn/previous-versions/sql/sql-server-2008/cc281310%28v%3dsql.100%2 ...

  9. SQLServer 中的身份验证及登录问题

    SQLServer 中的身份验证及登录问题 by:授客 QQ:1033553122 身份验证 SQL Server 支持两种身份验证模式,即Windows 身份验证模式和混合模式. Windows 身 ...

随机推荐

  1. [转]eclipse中使用maven插件的时候,运行run as maven build的时候报错

    转至:http://fxb4632242.iteye.com/blog/2193945 -Dmaven.multiModuleProjectDirectory system propery is no ...

  2. 【Python3】SMTP发送邮件

    犹豫和反复浪费了大量时间. 与朋友言 在完成一个邮件发送程序之前我根本不明白什么是邮件,哪怕已经读过廖雪峰大神的文章,没有贬低大神的意思,大神的博客已经非常的详细, 是我的眼大肚皮小毛病在作祟,由一个 ...

  3. 学习LINQ,发现一个好的工具。LINQPad!!

    今日学习LINQ,发现一个好的工具.LINQPad!! 此工具的好处在于,不需要在程序内执行,直接只用工具测试.然后代码通过即可,速度快,简洁方便. 可以生成其LINQ查询对应的lambda和SQL语 ...

  4. 电脑右键新建文本文档(txt)消失的解决办法

    其实只需要一个注册表就可以了 下载地址http://pan.baidu.com/s/1hr7r0fM 拿走不谢! 注册表的内容是这样的,你也可以新建一个文件把后缀名改成.reg然后把下面的内容copy ...

  5. PostgreSQL的 initdb 源代码分析之二十四

    继续分析: make_template0(); 展开: 无需再作解释,就是创建template0数据库 /* * copy template1 to template0 */ static void ...

  6. PostgreSQL的 initdb 源代码分析之七

    继续分析:由于我使用initdb的时候,没有指定 locale,所以会使用OS的缺省locale,这里是 en_US.UTF-8 printf(_("The files belonging ...

  7. iOS GCD 与 NSOperationQueue

    NSOperationQueue ios NSOperation vs. GCD StackOverflow: NSOperation vs. Grand Central Dispatch Blog: ...

  8. JSF教程(10)——生命周期之Update Model Values Phase

    在整个JSF生命周期中经历了取值.验证的阶段终于从request中拿到合理的值,以下就是在本阶段给相应的服务端对象(ManageBean)赋值了.JSF实现仅仅是去更新和input组件中value属性 ...

  9. Codeforces Testing Round #12 B. Restaurant 贪心

    B. Restaurant Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/597/problem ...

  10. poj 1087 C - A Plug for UNIX 网络流最大流

    C - A Plug for UNIXTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudge/contes ...