配置身份验证
Asp.net Framework支持三种验证类型
Windows身份验证
.net Passport身份验证
Forms身份验证
对于特定程序,同一时刻只能启用一种身份验证方式
默认情况下,系统将启用Windows身份验证。验证用户职责委派给了IIS
.Net Passport身份验证是诸如MSN和Hotmail这样的微软Web站点使用的验证类型。
Forms身份验证。启用Forms身份验证后,通常会使用Cookie来验证用户。
Web.Config
[code]
<configuration>
<system.web>
<authentication mode="Forms">
</authentication>
</system.web>
</configuration>
[/code]
1、配置Forms身份验证
Forms身份验证的几个配置选项如下所示:
cookieless 不支持Cookie时也可以使用Forms身份验证 UseCookies,UseUri,AutoDetect和UseDeviceProfie默认值 UseDeviceProfie
defaultUrl 用于指定用户通过身份验证后转向的页面,默认值:default.aspx
domain 用于指定与验证Cookie相关的域,默认为空字符串
enableCrossAppRedirects 用于通过传递查询字符串中的验证凭证来在应用程序之间验证用户。默认:false
loginUrl 用于指定Login页面的路径。默认:Login.aspx
name 用于指定验证cookie的名字。默认:.ASPXAUTH
path 用于指定和验证cookie相关联的路径。默认值:/
protection 用于指定如何对验证cookie进行加密。取值:All,Encryption,None和Validation。默认:ALL
requiressSSL 用于指定在传递验证Cookie时是否需要使用SSL连接,默认False
slidingExpiration 用于防止验证Cookie在一段时间内的再次访问中过期。取值:true,false 默认:true
timeout 用于指定验证Cookie有多少分钟后过期。默认30
<?xml version="1.0"?>
<configuration>
<system.web>
<authentication mode="Forms">
<forms name="s2_2"/>
</authentication>
</system.web>
</configuration>
2、使用无Cookie的Forms身份验证
Forms身份验证通常是使用Cookie来识别用户。有不支持Cookie的,可以用无Cookie身份验证功能。
启用无Cookie身份验证功能后,将通过一串添加到页面URL中的唯一字符串标识来识别用户。
如果用户在应用程序的相关页面间来回导航,那么字符串标识也将自动地在这些页面间进行传递,同时应用程序会在这样的页面交叉请求中自动识别用户。
如果希望ASP.NET Framework能自动检测浏览器是否支持Cookie功能,必须将Cookieless特性设置为AutoDetect。
[code]
<?xml version="1.0"?>
<configuration>
<system.web>
<authentication mode="Forms">
<forms cookieless="AutoDetect"/>
</authentication>
</system.web>
</configuration>
[/code]
3、在Forms身份验证中使用相对超时限制
用户在一段30分钟时间间隔内即使没有请求任何页面,该用户也仍然处于已验证状态。如果用户在合法登录后越过30分钟未访问任何页面,那么该用户将自动登出应用程序。
[code]
<?xml version="1.0"?>
<configuration>
<system.web>
<authentication mode="Forms">
<forms slidingExpiration="false" timeout="1"/>
</authentication>
</system.web>
</configuration>
[/code]
强制用户每分钟都进行一次登录。
4、跨应用程序使用Forms身份验证
问题:
1.不希望公司的员工在公司不同的应用程序间切换时时行多次登录
2.在运行一个Web服务器集群(web farm ),不希望用户在访问不同的Web服务器时都进行登录。
通过Web配置文件的machineKey元素,可以设置该加密密钥和校验码。
[code]
<?xml version="1.0"?>
<configuration>
<system.web>
<machineKey decryption="Auto" validation="SHA1" decryptionKey="AutoGenerate,IsolateApps" validationKey="AutoGenerate,IsolateApps"/>
<authentication mode="Forms">
<forms slidingExpiration="false" timeout="1"/>
</authentication>
</system.web>
</configuration>
[/code]
GenerateKeys.aspx
[code]
<%@ Page Language="C#" %>
<%@ Import Namespace="System.Security.Cryptography" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
protected void Page_Load(object sender, EventArgs e)
{
lblAES.Text = GetSequence(64);
lblSHA1.Text = GetSequence(128);
}
private string GetSequence(int length)
{
byte[] buffer = new byte[length / 2];
RNGCryptoServiceProvider provider = new RNGCryptoServiceProvider();
provider.GetBytes(buffer);
StringBuilder builder = new StringBuilder(length);
for (int i = 0; i < buffer.Length; i++)
builder.Append(string.Format("{0:X2}", buffer[i]));
return builder.ToString();
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
AES:
<asp:Label ID="lblAES" runat="server" />
<br />
<br />
SHA1:
<asp:Label ID="lblSHA1" runat="server" />
</div>
</form>
</body>
</html>
[/code]
显示指定了密钥的MachineKey元素,可以加入服务器根目录的Web配置文件。
5、跨域使用Forms身份验证
P62
6、使用FormsAuthentication类
使用Forms身份验证的主要API是FormsAuthentication类。
属性:
cookieDomain 返回身份验证Cookie关联的域
cookieMode 返回无Cookie身份验证模式。
cookieSupported 支持cookie 并Forms启用了cookie功能,返回true
DefaultUrl 验证成功后所转向的页面URL
EnableCrossAppRedirects 当身份验证凭证从查询字符串中删除时,该属性返回True
FormsCookieName 返回身份验证Cookie的名字
FormsCookiePath 返回和身份验证Cookie相关联的路径
LoginUrl 返回和用户身份验证时所转向的页面URL
RequiredSSL
SlidingExpiration 相对超时限制策略
方法:
Authenticate 根据存储在Web配置文件中的用户名和密码清单来验证输入的用户名和密码
Decrypt 用于解密身份验证Cookie
GetAuthCookie 用于获取身份验证Cookie
GetRedirectUrl 用于获取重定向到Login页面之前的原始页面路径
HashPasswordForStoringInConfigFile 对将要存入Web配置文件中的密码进行散列
RedirectFromLoginPage 使用返回重定向到Login页面前的原始页面
RedirectToLoginPage 将用户请求重定向到Login页面
RenewTicketIfOld 用于更新身份验证cookie的过期时间
SetAuthCookie 创建和发布身份验证Cookie
SignOut 移除身份验证Cookie并同时使用户登出应用程序
7、使用User类
通过Page.User或HttpContext.User属性可以获取当前用户的用户信息。
2011-5-4 10:07:23 danny
Asp.net Framework支持三种验证类型
Windows身份验证
.net Passport身份验证
Forms身份验证
对于特定程序,同一时刻只能启用一种身份验证方式
默认情况下,系统将启用Windows身份验证。验证用户职责委派给了IIS
.Net Passport身份验证是诸如MSN和Hotmail这样的微软Web站点使用的验证类型。
Forms身份验证。启用Forms身份验证后,通常会使用Cookie来验证用户。
Web.Config
[code]
<configuration>
<system.web>
<authentication mode="Forms">
</authentication>
</system.web>
</configuration>
[/code]
1、配置Forms身份验证
Forms身份验证的几个配置选项如下所示:
cookieless 不支持Cookie时也可以使用Forms身份验证 UseCookies,UseUri,AutoDetect和UseDeviceProfie默认值 UseDeviceProfie
defaultUrl 用于指定用户通过身份验证后转向的页面,默认值:default.aspx
domain 用于指定与验证Cookie相关的域,默认为空字符串
enableCrossAppRedirects 用于通过传递查询字符串中的验证凭证来在应用程序之间验证用户。默认:false
loginUrl 用于指定Login页面的路径。默认:Login.aspx
name 用于指定验证cookie的名字。默认:.ASPXAUTH
path 用于指定和验证cookie相关联的路径。默认值:/
protection 用于指定如何对验证cookie进行加密。取值:All,Encryption,None和Validation。默认:ALL
requiressSSL 用于指定在传递验证Cookie时是否需要使用SSL连接,默认False
slidingExpiration 用于防止验证Cookie在一段时间内的再次访问中过期。取值:true,false 默认:true
timeout 用于指定验证Cookie有多少分钟后过期。默认30
<?xml version="1.0"?>
<configuration>
<system.web>
<authentication mode="Forms">
<forms name="s2_2"/>
</authentication>
</system.web>
</configuration>
2、使用无Cookie的Forms身份验证
Forms身份验证通常是使用Cookie来识别用户。有不支持Cookie的,可以用无Cookie身份验证功能。
启用无Cookie身份验证功能后,将通过一串添加到页面URL中的唯一字符串标识来识别用户。
如果用户在应用程序的相关页面间来回导航,那么字符串标识也将自动地在这些页面间进行传递,同时应用程序会在这样的页面交叉请求中自动识别用户。
如果希望ASP.NET Framework能自动检测浏览器是否支持Cookie功能,必须将Cookieless特性设置为AutoDetect。
[code]
<?xml version="1.0"?>
<configuration>
<system.web>
<authentication mode="Forms">
<forms cookieless="AutoDetect"/>
</authentication>
</system.web>
</configuration>
[/code]
3、在Forms身份验证中使用相对超时限制
用户在一段30分钟时间间隔内即使没有请求任何页面,该用户也仍然处于已验证状态。如果用户在合法登录后越过30分钟未访问任何页面,那么该用户将自动登出应用程序。
[code]
<?xml version="1.0"?>
<configuration>
<system.web>
<authentication mode="Forms">
<forms slidingExpiration="false" timeout="1"/>
</authentication>
</system.web>
</configuration>
[/code]
强制用户每分钟都进行一次登录。
4、跨应用程序使用Forms身份验证
问题:
1.不希望公司的员工在公司不同的应用程序间切换时时行多次登录
2.在运行一个Web服务器集群(web farm ),不希望用户在访问不同的Web服务器时都进行登录。
通过Web配置文件的machineKey元素,可以设置该加密密钥和校验码。
[code]
<?xml version="1.0"?>
<configuration>
<system.web>
<machineKey decryption="Auto" validation="SHA1" decryptionKey="AutoGenerate,IsolateApps" validationKey="AutoGenerate,IsolateApps"/>
<authentication mode="Forms">
<forms slidingExpiration="false" timeout="1"/>
</authentication>
</system.web>
</configuration>
[/code]
GenerateKeys.aspx
[code]
<%@ Page Language="C#" %>
<%@ Import Namespace="System.Security.Cryptography" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
protected void Page_Load(object sender, EventArgs e)
{
lblAES.Text = GetSequence(64);
lblSHA1.Text = GetSequence(128);
}
private string GetSequence(int length)
{
byte[] buffer = new byte[length / 2];
RNGCryptoServiceProvider provider = new RNGCryptoServiceProvider();
provider.GetBytes(buffer);
StringBuilder builder = new StringBuilder(length);
for (int i = 0; i < buffer.Length; i++)
builder.Append(string.Format("{0:X2}", buffer[i]));
return builder.ToString();
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
AES:
<asp:Label ID="lblAES" runat="server" />
<br />
<br />
SHA1:
<asp:Label ID="lblSHA1" runat="server" />
</div>
</form>
</body>
</html>
[/code]
显示指定了密钥的MachineKey元素,可以加入服务器根目录的Web配置文件。
5、跨域使用Forms身份验证
P62
6、使用FormsAuthentication类
使用Forms身份验证的主要API是FormsAuthentication类。
属性:
cookieDomain 返回身份验证Cookie关联的域
cookieMode 返回无Cookie身份验证模式。
cookieSupported 支持cookie 并Forms启用了cookie功能,返回true
DefaultUrl 验证成功后所转向的页面URL
EnableCrossAppRedirects 当身份验证凭证从查询字符串中删除时,该属性返回True
FormsCookieName 返回身份验证Cookie的名字
FormsCookiePath 返回和身份验证Cookie相关联的路径
LoginUrl 返回和用户身份验证时所转向的页面URL
RequiredSSL
SlidingExpiration 相对超时限制策略
方法:
Authenticate 根据存储在Web配置文件中的用户名和密码清单来验证输入的用户名和密码
Decrypt 用于解密身份验证Cookie
GetAuthCookie 用于获取身份验证Cookie
GetRedirectUrl 用于获取重定向到Login页面之前的原始页面路径
HashPasswordForStoringInConfigFile 对将要存入Web配置文件中的密码进行散列
RedirectFromLoginPage 使用返回重定向到Login页面前的原始页面
RedirectToLoginPage 将用户请求重定向到Login页面
RenewTicketIfOld 用于更新身份验证cookie的过期时间
SetAuthCookie 创建和发布身份验证Cookie
SignOut 移除身份验证Cookie并同时使用户登出应用程序
7、使用User类
通过Page.User或HttpContext.User属性可以获取当前用户的用户信息。
2011-5-4 10:07:23 danny