ASP.NET身分識別驗證機制membership入門——配置篇(1){轉}

來源:互聯網
上載者:User

     幾乎所有的系統中都會使用到存取控制和角色管理這樣的功能,例如:建立、修改、刪除使用者和角色,為使用者指派角色,管理角色中的使用者等等。於是MS在ASP.NET 2.0開始,實現了這些功能,使得我們在開發中,不需要考慮這方面的內容,把更多的精力投入到商務邏輯的開發中去。從而大大的提高了開發的效率。下面我們就來學習一下如何使用membership。

1.添加資料庫支援

  要使用membership首先需要資料庫的支援,所以我們第一步就是建立用來存放使用者、角色等資訊的表結構。別擔心,MS早就把建立表的語句寫好了,並且還提供了使用者介面,讓我們點點滑鼠就可以建立好所需的結構了。

  具體操作如下:進入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節點中。

 

    複製過來的代碼如下:

    <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複製過來的,所以必須改名,防止重名

      type:資料提供者類型,如果使用的是MSSQL資料庫,則保持不變即可,如果使用的是Oracle等其他資料庫,則必須自己建立一個類來繼承MembershipProvider抽象基類,重寫裡邊的所有抽象方法,然後把類型寫在這裡即可。

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

      applicationName:應用程式名稱,membership允許多個應用程式共同使用一個資料庫來管理自己的使用者、角色資訊,各應用程式只需配置不同的applicationName即可,當然,如果想要多個應用程式使用同一份使用者角色資訊,只需設定一樣的applicationName即可。

      requiresUniqueEmail:顧名思義,使用者註冊時,是否需要提供未註冊過的郵箱。

      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>

  

    下面是說明(msdn抄的):

  • 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 的一部分傳遞的票證。

  需要說明一下的是LoginUrl和DefaultUrl屬性:LoginUrl指向登入頁面,當ASP.NET判斷出該使用者請求的資源不允許匿名訪問,而該使用者未登入時,ASP.NET會自動跳轉到LoginUrl所指向的頁面,當登入成功後,則跳回原來請求的頁面。DefaultUrl指向預設頁面。當我們直接存取登入頁面,並登入成功後,這時ASP.NET會跳轉到DefaultUrl指向的頁面。其他的選項不寫都可以,因為有預設值。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.