`
阅读更多
配置身份验证

Asp.net Framework支持三种验证类型
   Windows身份验证
   .net Passport身份验证
   Forms身份验证

对于特定程序,同一时刻只能启用一种身份验证方式

默认情况下,系统将启用Windows身份验证。验证用户职责委派给了IIS
.Net Passport身份验证是诸如MSN和Hotmail这样的微软Web站点使用的验证类型。
Forms身份验证。启用Forms身份验证后,通常会使用Cookie来验证用户。

Web.Config
<configuration>
  <system.web>
    <authentication mode="Forms">
    </authentication>
  </system.web>
</configuration>


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。
<?xml version="1.0"?>

<configuration>
  <system.web>
    <authentication mode="Forms">
      <forms  cookieless="AutoDetect"/>
    </authentication>
  </system.web>
</configuration>


3、在Forms身份验证中使用相对超时限制
用户在一段30分钟时间间隔内即使没有请求任何页面,该用户也仍然处于已验证状态。如果用户在合法登录后越过30分钟未访问任何页面,那么该用户将自动登出应用程序。
<?xml version="1.0"?>

<configuration>
  <system.web>
    <authentication mode="Forms">
      <forms slidingExpiration="false" timeout="1"/>
    </authentication>
  </system.web>
</configuration>

强制用户每分钟都进行一次登录。

4、跨应用程序使用Forms身份验证
问题:
1.不希望公司的员工在公司不同的应用程序间切换时时行多次登录
2.在运行一个Web服务器集群(web farm ),不希望用户在访问不同的Web服务器时都进行登录。

通过Web配置文件的machineKey元素,可以设置该加密密钥和校验码。
<?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>


GenerateKeys.aspx
<%@ 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>


显示指定了密钥的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
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics