日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

WCF Membership Provider

發(fā)布時(shí)間:2025/4/5 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 WCF Membership Provider 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

??ASP.NET 是自.NET 1.x 就已經(jīng)有的技術(shù),利用IIS+ASP.NET 搭建的網(wǎng)站已經(jīng)有很多。針對(duì)IIS+ASP.NET 的網(wǎng)站模型也有很多案例,通過(guò)現(xiàn)在的搜索服務(wù)我們可以很輕易的獲取這些內(nèi)容。

? 大家可能很熟悉如何使用窗體認(rèn)證,Windows認(rèn)證,用戶(hù)名/密碼, SQL Server 等認(rèn)證技術(shù)/服務(wù)來(lái)實(shí)現(xiàn)IIS + ASP.NET 站點(diǎn)的認(rèn)證,而現(xiàn)在我們要討論的是如何使用ASP.NET 來(lái)對(duì)WCF 服務(wù)進(jìn)行驗(yàn)證。

? 現(xiàn)在,我們直接進(jìn)入主題...

??我們要討論的模型簡(jiǎn)化的說(shuō)就是WCF + 證書(shū) + 消息認(rèn)證 + Membership Provider, 具體說(shuō)來(lái)就是WCF服務(wù)使用證書(shū)對(duì)通信過(guò)程加密,然后服務(wù)端對(duì)消息解密并通過(guò)Membership Provider 對(duì)解密的消息(用戶(hù)名/密碼)進(jìn)行驗(yàn)證。

請(qǐng)看如下截圖:

?圖片1-1 WCF 消息認(rèn)證 + SqlMembership Provider 認(rèn)證

?

?接下來(lái)我們就如何構(gòu)建WCF 消息認(rèn)證 + SqlMembership Provider 認(rèn)證給出一個(gè)具體的實(shí)施步驟。?

?

?第一步: 創(chuàng)建WCF IIS 服務(wù)

?創(chuàng)建一個(gè)新的網(wǎng)站->選擇 WCFService->將其命名為 service

?

?第二步: 配置Solution.

?

圖片1-2 Solution 配置

1 [ServiceContract]
2 ?public interface IService
3 {
4 [OperationContract]
5 string GetData(int value);
6 [OperationContract]
7 CompositeType GetDataUsingDataContract(CompositeType composite);
8 ?// TODO: Add your service operations here
9 ?}
10 [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]
11 ?public class myService : IService
12 {
13 public string GetData(int value)
14 {
15 return string.Format("You entered: {0}", value);
16 }
17 }

第三步: 創(chuàng)建Form 認(rèn)證數(shù)據(jù)庫(kù)(Membership Provider 使用表單認(rèn)證模式)

? 轉(zhuǎn)到C:\WINDOWS\Microsoft.NET\Framework\<versionNumber>\aspnet_regsql.exe,雙擊運(yùn)行aspnet_regsql.exe,

? 按步驟保留默認(rèn)配置即可。

? 如果有不清楚的部分請(qǐng)參考http://msdn.microsoft.com/en-us/library/x28wfk74.aspx

??

?第四步: 創(chuàng)建證書(shū)

?我們借助Windows 自帶的Makecert.exe 證書(shū)生成工具生成證書(shū)。

?打開(kāi)命令行窗口,輸入:

?makecert -r -pe -n "CN=www.yourserver.com" -b 01/01/2000 -e 01/01/2036 -eku 1.3.6.1.5.5.7.3.1

????????????? -ss my -sr localMachine -sky exchange -sp "Microsoft RSA SChannel Cryptographic Provider"

????????????? -sy 12

?可以參考http://www.inventec.ch/chdh/notes/14.htm?

???

?第五步: 配置IIS Host?服務(wù) web.config 文件

?首先是連接字符串部分:???

1 <connectionStrings>
2 <clear />
3 <add name="LocalSqlServer" connectionString="Data Source=DANIELFACTORY2;
4 Initial Catalog=aspnetdb;Integrated Security=True" />
5 </connectionStrings>

注意要將連接字符串中對(duì)應(yīng)的值更改,使其匹配個(gè)人環(huán)境配置,aspnetdb 為第三步生成的默認(rèn)數(shù)據(jù)庫(kù)。

??

第六步: 在IIS Host 服務(wù)web.config 文件中創(chuàng)建Membership Provider

1 <membership defaultProvider="membership">
2 <providers>
3 <add name="membership" type="System.Web.Security.SqlMembershipProvider,
4 System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
5 connectionStringName="LocalSqlServer" enablePasswordRetrieval="false"
6 enablePasswordReset="true" requiresQuestionAndAnswer="true" applicationName="/"
7 requiresUniqueEmail="false" passwordFormat="Hashed" maxInvalidPasswordAttempts="5"
8 minRequiredPasswordLength="7" minRequiredNonalphanumericCharacters="1"
9 passwordAttemptWindow="10" passwordStrengthRegularExpression="" />
10 </providers>
11 </membership>
12 <authentication mode="Forms" />

也可以使用自定義SqlMembershipProvider,注意connectionStringName與第五步中創(chuàng)建的名字要匹配。

?

?第七步:?為IIS Host 服務(wù)配置完成的web.config 文件

???? 配置完成后要檢查以下幾項(xiàng)配置:

??1)消息認(rèn)證類(lèi)型(Message credential type) ==?UserName

??2)服務(wù)協(xié)商憑據(jù)(negotiate Service credential)?== false

??3)服務(wù)證書(shū)

??4)UserNameAuthentication->UserNamepasswordvalidatormode=MembershipProvider?

????? && MembershipProviderName == membership.

????? 在我的例子中 membership provider?的名字是membership.

??5) 檢查證書(shū)指紋

??????http://msdn.microsoft.com/en-us/library/ms734695.aspx.

? 6) 打開(kāi)IIS Site Manager,為我們的IIS Host 服務(wù)新建一個(gè)站點(diǎn)。

?????

??? 圖片1-3 創(chuàng)建IIS Site

?? 7) 為我們的IIS Host Site 設(shè)定認(rèn)證模式

??????

?

???

???圖片1-4 設(shè)置IIS Site 認(rèn)證模式

??

?? 8) 確定服務(wù)已經(jīng)成功啟動(dòng)

?

?第八步: 創(chuàng)建一個(gè)新的控制臺(tái)應(yīng)用程序作為客戶(hù)端

?

?第九步: 利用添加服務(wù)引用功能為客戶(hù)端添加服務(wù)引用

?

?圖片1-5 生成客戶(hù)端代理

?

?第十步: 客戶(hù)端代碼?????????

至此,你可以運(yùn)行一下服務(wù)端和客戶(hù)端,初步看一下結(jié)果,但是很不幸,你會(huì)得到下面的錯(cuò)誤:

?

? 圖片1-6 客戶(hù)端運(yùn)行錯(cuò)誤信息

?

? 說(shuō)實(shí)話(huà),產(chǎn)生這個(gè)錯(cuò)誤的原因非常多,但從字面意思看是由于沒(méi)有建立安全連接導(dǎo)致的。實(shí)際上微軟為了防止攻擊者知道太多具體的錯(cuò)誤信息,大多對(duì)類(lèi)似的錯(cuò)誤信息進(jìn)行了包裝。

? 這個(gè)錯(cuò)誤的真正原因可能是用戶(hù)名/密碼不正確,也可能是配置錯(cuò)誤,但是如果直接報(bào)出用戶(hù)名不正確/密碼錯(cuò)誤的異常信息,那么對(duì)攻擊者來(lái)說(shuō)豈不是太方便了?!???

? 但是我們?nèi)绾尾拍苤赖讓渝e(cuò)誤到底是由什么引起的呢?

? 其實(shí),這個(gè)問(wèn)題才是我們真正應(yīng)該學(xué)習(xí)和了解掌握的,我們之前在服務(wù)端配置了診斷信息,所以現(xiàn)在我們可以到相關(guān)log 文件中找一下錯(cuò)誤原因:

圖片1-7 WCF Membership Provider 具體驗(yàn)證錯(cuò)誤信息

?

? 這個(gè)錯(cuò)誤說(shuō)明我們?cè)诳蛻?hù)端提供的用戶(hù)名/密碼驗(yàn)證失敗。

? 那么我們現(xiàn)在需要想一下,到目前為止,除了在客戶(hù)端設(shè)置密碼以外,我們未曾在任何地方設(shè)置用戶(hù)名/密碼,那么問(wèn)題可能是由于我們還未設(shè)置認(rèn)證信息導(dǎo)致的,也就是說(shuō)我們還沒(méi)有建立信息認(rèn)證中心(這個(gè)稱(chēng)呼著實(shí)有些大,很?chē)樔?。

? 回到之前,我們通過(guò)aspnet_regsql.exe 生成aspnetdb 的過(guò)程,打開(kāi)這個(gè)數(shù)據(jù)庫(kù)我們就可以知道用戶(hù)名/密碼是存在這里面的,但是如何將用戶(hù)信息加入這個(gè)表內(nèi)呢? 你是不是想通過(guò)SQL 語(yǔ)句? 哈哈,我一開(kāi)始也是這么想的!

? 但是,不要忘了,我們現(xiàn)在還不了解這個(gè)數(shù)據(jù)庫(kù)中各個(gè)表項(xiàng)的關(guān)聯(lián)關(guān)系,這么加只會(huì)導(dǎo)致牛毛越來(lái)越多,那么如何解決問(wèn)題呢?很遺憾,不要想著通過(guò)Google, Baidu 來(lái)搜索答案,這個(gè)問(wèn)題在網(wǎng)上沒(méi)有任何有價(jià)值的信息,關(guān)鍵時(shí)刻還得靠我們自己!!!

現(xiàn)在,我們還是回到Visual Studio,執(zhí)行如下操作:

圖片1-8 ASP.NET Configuration 配置

?

單擊圖片框中的圖標(biāo),我們將得到以下界面

圖片1-9 ASP.NET Site 配置界面

?

依次轉(zhuǎn)到Security->Users->Create User->創(chuàng)建用戶(hù)

圖片1-10 創(chuàng)建新用戶(hù)

?

?圖片1-11 用戶(hù)創(chuàng)建成功

?

接下來(lái),好好享受你的WCF 之旅吧 :)

總結(jié)

以上是生活随笔為你收集整理的WCF Membership Provider的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。