ASP.NET身份验证机制membership入门——配置篇(1){转}
? ? ?幾乎所有的系統(tǒng)中都會(huì)使用到訪問控制和角色管理這樣的功能,例如:新建、修改、刪除用戶和角色,為用戶分配角色,管理角色中的用戶等等。于是MS在ASP.NET 2.0開始,實(shí)現(xiàn)了這些功能,使得我們?cè)陂_發(fā)中,不需要考慮這方面的內(nèi)容,把更多的精力投入到業(yè)務(wù)邏輯的開發(fā)中去。從而大大的提高了開發(fā)的效率。下面我們就來學(xué)習(xí)一下如何使用membership。
1.添加數(shù)據(jù)庫支持
要使用membership首先需要數(shù)據(jù)庫的支持,所以我們第一步就是創(chuàng)建用來存放用戶、角色等信息的表結(jié)構(gòu)。別擔(dān)心,MS早就把創(chuàng)建表的語句寫好了,并且還提供了用戶界面,讓我們點(diǎn)點(diǎn)鼠標(biāo)就可以創(chuàng)建好所需的結(jié)構(gòu)了。
具體操作如下:進(jìn)入C:\WINDOWS\Microsoft.NET\Framework\v2.0.xxxxx(vs2010的目錄是v4.0.xxxx)這個(gè)目錄下,找到aspnet_regsql.exe直接雙擊運(yùn)行,就會(huì)彈出一個(gè)界面,直接下一步。第二個(gè)界面讓我們選擇是添加表結(jié)構(gòu)還是移除,我們當(dāng)然選擇添加,繼續(xù)下一步。在這個(gè)界面中需要填寫服務(wù)器ip地址以及身份驗(yàn)證信息。在填寫完畢后,就可以選擇你要將表結(jié)構(gòu)添加到哪個(gè)數(shù)據(jù)庫中了。需要注意的是:如果選擇默認(rèn),則會(huì)創(chuàng)建一個(gè)新的名叫aspnetdb的數(shù)據(jù)庫,然后將表結(jié)構(gòu)加入其中。一路下一步就完成了數(shù)據(jù)庫結(jié)構(gòu)的添加。
2.web.config配置
好了,表結(jié)構(gòu)添加完畢,接下來就是需要在項(xiàng)目中進(jìn)行一些簡(jiǎn)單的配置了。我們?cè)趘s中新建一個(gè)網(wǎng)站,隨后再用記事本打開C:\WINDOWS\Microsoft.NET\Framework\v2.0.xxxxx\CONFIG\machine.config這個(gè)文件,找到system.web節(jié)點(diǎn)下的membership節(jié)點(diǎn),將整個(gè)節(jié)點(diǎn)復(fù)制到我們新建網(wǎng)站的web.config中的system.web節(jié)點(diǎn)中。
?
復(fù)制過來的代碼如下:
<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>
? 下面是主要的幾個(gè)屬性的含義:
name:數(shù)據(jù)提供程序的名稱,由于我們是從machine.config復(fù)制過來的,所以必須改名,防止重名
type:數(shù)據(jù)提供程序類型,如果使用的是MSSQL數(shù)據(jù)庫,則保持不變即可,如果使用的是Oracle等其他數(shù)據(jù)庫,則必須自己創(chuàng)建一個(gè)類來繼承MembershipProvider抽象基類,重寫里邊的所有抽象方法,然后把類型寫在這里即可。
connectionStringName:該屬性必須指定在<connectionStrings>節(jié)點(diǎn)中,一個(gè)連接字符串的名字。
applicationName:應(yīng)用程序名稱,membership允許多個(gè)應(yīng)用程序共同使用一個(gè)數(shù)據(jù)庫來管理自己的用戶、角色信息,各應(yīng)用程序只需配置不同的applicationName即可,當(dāng)然,如果想要多個(gè)應(yīng)用程序使用同一份用戶角色信息,只需設(shè)置一樣的applicationName即可。
requiresUniqueEmail:顧名思義,用戶注冊(cè)時(shí),是否需要提供未注冊(cè)過的郵箱。
passwordFormat:密碼存儲(chǔ)格式,密碼保存在數(shù)據(jù)庫中的格式,最常用的有Clear(不加密)和Hashed(使用SHA1算法加密)
minRequiredPasswordLength:最小密碼長(zhǎng)度。
minRequiredNonalphanumericCharacters:指定有效密碼中必須包含的特殊字符的最小數(shù)量,就是說不是字母也不是數(shù)字的字符的數(shù)量,比如+-*/,.什么的,增加密碼強(qiáng)度
好了,我們將配置修改一下并添加連接字符串:
<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>
?
上面用黃色高亮字體標(biāo)注出來的屬性,是為了告訴membership采用我們剛才添加的mySqlMembershipProvider這個(gè)配置,因?yàn)閙achine.config中有一個(gè)AspNetSqlMembershipProvider,我們又在web.config中又添加了一個(gè)mySqlMembershipProvider,現(xiàn)在有了兩個(gè)配置,所以應(yīng)該使用defaultProvider屬性指明本網(wǎng)站使用哪個(gè)配置。隨后又指定了連接字符串配置的名稱,一個(gè)Email不允許重復(fù)注冊(cè),最小密碼長(zhǎng)度為6,不限制密碼中必須含有標(biāo)點(diǎn)符號(hào)等配置。
?3.ASP.NET身份驗(yàn)證配置
membership算是配置到這里了,但是還沒有結(jié)束,我們還需要把ASP.NET的身份驗(yàn)證機(jī)制配置為Forms身份驗(yàn)證。
補(bǔ)充內(nèi)容:
ASP.NET一共有三種身份驗(yàn)證方式,分別為:
Windows驗(yàn)證是一種把能夠訪問到IIS的用戶認(rèn)為是已經(jīng)通過身份驗(yàn)證的用戶??梢酝ㄟ^windows自帶的身份驗(yàn)證策略來控制哪些頁面用戶可以訪問,哪些不能訪問。這是一種最簡(jiǎn)單的方式,基本不用寫多少代碼,全部通過配置就可以實(shí)現(xiàn)訪問的控制。
Passport驗(yàn)證是由微軟提供身份驗(yàn)證服務(wù)。當(dāng)然這是收費(fèi)的。
Forms驗(yàn)證就是在用戶登錄時(shí),向?yàn)g覽器中添加一個(gè)cookie,然后在用戶每次訪問時(shí)都檢測(cè)這個(gè)cookie,從而達(dá)到身份驗(yàn)證的目的。
?
配置Forms身份驗(yàn)證其實(shí)就是把下面代碼復(fù)制到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?指向應(yīng)用程序的自定義登錄頁。應(yīng)該將登錄頁放在需要安全套接字層 (SSL) 的文件夾中。這有助于確保憑據(jù)從瀏覽器傳到 Web 服務(wù)器時(shí)的完整性。
-
protection?設(shè)置為?All,以指定窗體身份驗(yàn)證票的保密性和完整性。這導(dǎo)致使用?machineKey?元素上指定的算法對(duì)身份驗(yàn)證票證進(jìn)行加密,并且使用同樣是?machineKey?元素上指定的哈希算法進(jìn)行簽名。
-
timeout?用于指定窗體身份驗(yàn)證會(huì)話的有限生存期。默認(rèn)值為 30 分鐘。如果頒發(fā)持久的窗體身份驗(yàn)證 Cookie,timeout?屬性還用于設(shè)置持久 Cookie 的生存期。
-
name?和?path?設(shè)置為應(yīng)用程序的配置文件中定義的值。
-
requireSSL?設(shè)置為?false。該配置意味著身份驗(yàn)證 Cookie 可通過未經(jīng) SSL 加密的信道進(jìn)行傳輸。如果擔(dān)心會(huì)話竊取,應(yīng)考慮將?requireSSL?設(shè)置為?true。
-
slidingExpiration?設(shè)置為?true?以執(zhí)行變化的會(huì)話生存期。這意味著只要用戶在站點(diǎn)上處于活動(dòng)狀態(tài),會(huì)話超時(shí)就會(huì)定期重置。
-
defaultUrl?設(shè)置為應(yīng)用程序的 Default.aspx 頁。
-
cookieless?設(shè)置為?UseDeviceProfile,以指定應(yīng)用程序?qū)λ兄С?Cookie 的瀏覽器都使用 Cookie。如果不支持 Cookie 的瀏覽器訪問該站點(diǎn),窗體身份驗(yàn)證在 URL 上打包身份驗(yàn)證票。
-
enableCrossAppRedirects?設(shè)置為?false,以指明窗體身份驗(yàn)證不支持自動(dòng)處理在應(yīng)用程序之間傳遞的查詢字符串上的票證以及作為某個(gè)窗體 POST 的一部分傳遞的票證。
需要說明一下的是LoginUrl和DefaultUrl屬性:LoginUrl指向登錄頁面,當(dāng)ASP.NET判斷出該用戶請(qǐng)求的資源不允許匿名訪問,而該用戶未登錄時(shí),ASP.NET會(huì)自動(dòng)跳轉(zhuǎn)到LoginUrl所指向的頁面,當(dāng)?shù)卿洺晒?#xff0c;則跳轉(zhuǎn)回原來請(qǐng)求的頁面。DefaultUrl指向默認(rèn)頁面。當(dāng)我們直接訪問登錄頁面,并登錄成功后,這時(shí)ASP.NET會(huì)跳轉(zhuǎn)到DefaultUrl指向的頁面。其他的選項(xiàng)不寫都可以,因?yàn)橛心J(rèn)值。
轉(zhuǎn)載于:https://www.cnblogs.com/answercard/archive/2012/12/05/2803475.html
總結(jié)
以上是生活随笔為你收集整理的ASP.NET身份验证机制membership入门——配置篇(1){转}的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 理解关于java反射中类的域及修饰符
- 下一篇: div水平垂直居中