asp.net mvc3+EF4.1項目實戰

ASP.NET身份驗證機制membership入門——配置篇(1)

  http://www.cnblogs.com/xlb2000/archive/2010/05/10/1729076.htmlhtml

 

1.添加數據庫支持

    要使用membership首先須要數據庫的支持,因此咱們第一步就是建立用來存放用戶、角色等信息的表結構。別擔憂,MS早就把建立表的語句寫好了,而且還提供了用戶界面,讓咱們點點鼠標就能夠建立好所需的結構了。web


    具體操做以下:進入C:\WINDOWS\Microsoft.NET\Framework\v2.0.xxxxx(vs2010 的目錄是v4.0.xxxx)這個目錄下,找到aspnet_regsql.exe直接雙擊運行,就會彈出一個界面,直接下一步。第二個界面讓咱們選擇是 添加表結構仍是移除,咱們固然選擇添加,繼續下一步。在這個界面中須要填寫服務器ip地址以及身份驗證信息。在填寫完畢後,就能夠選擇你要將表結構添加到 哪一個數據庫中了。須要注意的是:若是選擇默認,則會建立一個新的名叫aspnetdb的數據庫,而後將表結構加入其中。一路下一步就完成了數據庫結構的添 加。算法

2.web.config配置


    好了,表結構添加完畢,接下來就是須要在項目中進行一些簡單的配置了。咱們在vs中新建一個網站,隨後再用記事本打開 C:\WINDOWS\Microsoft.NET\Framework\v2.0.xxxxx\CONFIG\machine.config這個文件, 找到system.web節點下的membership節點,將整個節點複製到咱們新建網站的web.config中的system.web節點中。sql

 

<membership>
      <providers>
        <add name="AspNetSqlMembershipProvider"
            type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
            connectionStringName="LocalSqlServer"
            enablePasswordRetrieval="false" 
            enablePasswordReset="true" 
            requiresQuestionAndAnswer="true" 
            applicationName="/" 
            requiresUniqueEmail="false" 
            passwordFormat="Hashed" 
            maxInvalidPasswordAttempts="5" 
            minRequiredPasswordLength="7" 
            minRequiredNonalphanumericCharacters="1" 
            passwordAttemptWindow="10" 
            passwordStrengthRegularExpression=""/>
      </providers>
    </membership>

下面是主要的幾個屬性的含義:數據庫

      name:數據提供程序的名稱,因爲咱們是從machine.config複製過來的,因此必須更名,防止重名windows

      type:數據提供程序類型,若是使用的是MSSQL數據庫,則保持不變便可,若是使用的是Oracle等其餘數據庫,則必須本身建立一個類來繼承MembershipProvider抽象基類,重寫裏邊的全部抽象方法,而後把類型寫在這裏便可。瀏覽器

      connectionStringName:該屬性必須指定在<connectionStrings>節點中,一個鏈接字符串的名字。安全

      applicationName:應用程序名 稱,membership容許多個應用程序共同使用一個數據庫來管理本身的用戶、角色信息,各應用程序只需配置不一樣的applicationName即 可,固然,若是想要多個應用程序使用同一份用戶角色信息,只需設置同樣的applicationName便可。服務器

      requiresUniqueEmail:顧名思義,用戶註冊時,是否須要提供未註冊過的郵箱。cookie

      passwordFormat:密碼存儲格式,密碼保存在數據庫中的格式,最經常使用的有Clear(不加密)和Hashed(使用SHA1算法加密)
      minRequiredPasswordLength:最小密碼長度。

      minRequiredNonalphanumericCharacters:指定有效密碼中必須包含的特殊字符的最小數量,就是說不是字母也不是數字的字符的數量,好比+-*/,.什麼的,增長密碼強度

      

      好了,咱們將配置修改一下並添加鏈接字符串:

<connectionStrings>
    <add name="ConnectionString" connectionString="server=.;uid=sa;pwd=sa;database=aspnetdb"/>
</connectionStrings>

<system.web>
    <membership defaultProvider="mySqlMembershipProvider">
      <providers>
        <add name="mySqlMembershipProvider"
            type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
            connectionStringName="ConnectionString"
            enablePasswordRetrieval="false" 
            enablePasswordReset="true" 
            requiresQuestionAndAnswer="true" 
            applicationName="TestMembership" 
            requiresUniqueEmail="true" 
            passwordFormat="Hashed" 
            maxInvalidPasswordAttempts="5" 
            minRequiredPasswordLength="6" 
            minRequiredNonalphanumericCharacters="0" 
            passwordAttemptWindow="10" 
            passwordStrengthRegularExpression=""/>
      </providers>
    </membership>
</system.web>

上面用黃色高亮字體標註出來的屬性,是爲了告訴membership採用咱們剛纔添加的mySqlMembershipProvider這個配置,由於machine.config中有一個AspNetSqlMembershipProvider,咱們又在web.config中又添加了一個mySqlMembershipProvider,如今有了兩個配置,因此應該使用defaultProvider屬性指明本網站使用哪一個配置。隨後又指定了鏈接字符串配置的名稱,一個Email不容許重複註冊,最小密碼長度爲6,不限制密碼中必須含有標點符號等配置。

 3.ASP.NET身份驗證配置

    membership算是配置到這裏了,可是尚未結束,咱們還須要把ASP.NET的身份驗證機制配置爲Forms身份驗證。

 補充內容:

  ASP.NET一共有三種身份驗證方式,分別爲:

 

    1. Forms驗證
    2. Windows驗證
    3. Passport驗證

 

    Windows驗證是一種把可以訪問到IIS的用戶認爲是已經經過身份驗證的用戶。能夠經過windows自帶的身份驗證策略來控制哪些頁面用戶能夠訪問,哪些不能訪問。這是一種最簡單的方式,基本不用寫多少代碼,所有經過配置就能夠實現訪問的控制。

 

    Passport驗證是由微軟提供身份驗證服務。固然這是收費的。

 

    Forms驗證就是在用戶登陸時,向瀏覽器中添加一個cookie,而後在用戶每次訪問時都檢測這個cookie,從而達到身份驗證的目的。

 

 

 

    配置Forms身份驗證其實就是把下面代碼複製到web.config中去就能夠了:

 

<system.web>
  <authentication mode="Forms">
    <forms loginUrl="Login.aspx"
           protection="All"
           timeout="30"
           name=".ASPXAUTH" 
           path="/"
           slidingExpiration="true"
           defaultUrl="default.aspx"
           cookieless="UseDeviceProfile"/>
  </authentication>
</system.web>

 

  • loginUrl 指向應用程序的自定義登陸頁。應該將登陸頁放在須要安全套接字層 (SSL) 的文件夾中。這有助於確保憑據從瀏覽器傳到 Web 服務器時的完整性。

  • protection 設置爲 All以指定窗體身份驗證票的保密性和完整性。這致使使用 machineKey 元素上指定的算法對身份驗證票證進行加密,而且使用一樣是 machineKey 元素上指定的哈希算法進行簽名。

  • timeout 用於指定窗體身份驗證會話的有限生存期。默認值爲 30 分鐘。若是頒發持久的窗體身份驗證 Cookie,timeout 屬性還用於設置持久 Cookie 的生存期。

  • name path 設置爲應用程序的配置文件中定義的值。

  • requireSSL 設置爲 false。該配置意味着身份驗證 Cookie 可經過未經 SSL 加密的信道進行傳輸。若是擔憂會話竊取,應考慮將 requireSSL 設置爲 true

  • slidingExpiration 設置爲 true 以執行變化的會話生存期。這意味着只要用戶在站點上處於活動狀態,會話超時就會按期重置。

  • defaultUrl 設置爲應用程序的 Default.aspx 頁。

  • cookieless 設置爲 UseDeviceProfile,以指定應用程序對全部支持 Cookie 的瀏覽器都使用 Cookie。若是不支持 Cookie 的瀏覽器訪問該站點,窗體身份驗證在 URL 上打包身份驗證票。

  • enableCrossAppRedirects 設置爲 false,以指明窗體身份驗證不支持自動處理在應用程序之間傳遞的查詢字符串上的票證以及做爲某個窗體 POST 的一部分傳遞的票證。

    須要說明一下的是LoginUrlDefaultUrl屬性:LoginUrl指向登陸頁面,當ASP.NET判斷出該用戶請求的資源不容許匿名訪問,而該用戶未登陸時,ASP.NET會自動跳轉到LoginUrl所指向的頁面,當登陸成功後,則跳轉回原來請求的頁面。DefaultUrl指向默認頁面。當咱們直接訪問登陸頁面,並登陸成功後,這時ASP.NET會跳轉到DefaultUrl指向的頁面。其餘的選項不寫均可以,由於有默認值。

相關文章
相關標籤/搜索