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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

WCF Membership Provider

發布時間:2025/4/5 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 WCF Membership Provider 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

??ASP.NET 是自.NET 1.x 就已經有的技術,利用IIS+ASP.NET 搭建的網站已經有很多。針對IIS+ASP.NET 的網站模型也有很多案例,通過現在的搜索服務我們可以很輕易的獲取這些內容。

? 大家可能很熟悉如何使用窗體認證,Windows認證,用戶名/密碼, SQL Server 等認證技術/服務來實現IIS + ASP.NET 站點的認證,而現在我們要討論的是如何使用ASP.NET 來對WCF 服務進行驗證。

? 現在,我們直接進入主題...

??我們要討論的模型簡化的說就是WCF + 證書 + 消息認證 + Membership Provider, 具體說來就是WCF服務使用證書對通信過程加密,然后服務端對消息解密并通過Membership Provider 對解密的消息(用戶名/密碼)進行驗證。

請看如下截圖:

?圖片1-1 WCF 消息認證 + SqlMembership Provider 認證

?

?接下來我們就如何構建WCF 消息認證 + SqlMembership Provider 認證給出一個具體的實施步驟。?

?

?第一步: 創建WCF IIS 服務

?創建一個新的網站->選擇 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 }

第三步: 創建Form 認證數據庫(Membership Provider 使用表單認證模式)

? 轉到C:\WINDOWS\Microsoft.NET\Framework\<versionNumber>\aspnet_regsql.exe,雙擊運行aspnet_regsql.exe,

? 按步驟保留默認配置即可。

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

??

?第四步: 創建證書

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

?打開命令行窗口,輸入:

?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?服務 web.config 文件

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

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

注意要將連接字符串中對應的值更改,使其匹配個人環境配置,aspnetdb 為第三步生成的默認數據庫。

??

第六步: 在IIS Host 服務web.config 文件中創建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與第五步中創建的名字要匹配。

?

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

???? 配置完成后要檢查以下幾項配置:

??1)消息認證類型(Message credential type) ==?UserName

??2)服務協商憑據(negotiate Service credential)?== false

??3)服務證書

??4)UserNameAuthentication->UserNamepasswordvalidatormode=MembershipProvider?

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

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

??5) 檢查證書指紋

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

? 6) 打開IIS Site Manager,為我們的IIS Host 服務新建一個站點。

?????

??? 圖片1-3 創建IIS Site

?? 7) 為我們的IIS Host Site 設定認證模式

??????

?

???

???圖片1-4 設置IIS Site 認證模式

??

?? 8) 確定服務已經成功啟動

?

?第八步: 創建一個新的控制臺應用程序作為客戶端

?

?第九步: 利用添加服務引用功能為客戶端添加服務引用

?

?圖片1-5 生成客戶端代理

?

?第十步: 客戶端代碼?????????

至此,你可以運行一下服務端和客戶端,初步看一下結果,但是很不幸,你會得到下面的錯誤:

?

? 圖片1-6 客戶端運行錯誤信息

?

? 說實話,產生這個錯誤的原因非常多,但從字面意思看是由于沒有建立安全連接導致的。實際上微軟為了防止攻擊者知道太多具體的錯誤信息,大多對類似的錯誤信息進行了包裝。

? 這個錯誤的真正原因可能是用戶名/密碼不正確,也可能是配置錯誤,但是如果直接報出用戶名不正確/密碼錯誤的異常信息,那么對攻擊者來說豈不是太方便了?!???

? 但是我們如何才能知道底層錯誤到底是由什么引起的呢?

? 其實,這個問題才是我們真正應該學習和了解掌握的,我們之前在服務端配置了診斷信息,所以現在我們可以到相關log 文件中找一下錯誤原因:

圖片1-7 WCF Membership Provider 具體驗證錯誤信息

?

? 這個錯誤說明我們在客戶端提供的用戶名/密碼驗證失敗。

? 那么我們現在需要想一下,到目前為止,除了在客戶端設置密碼以外,我們未曾在任何地方設置用戶名/密碼,那么問題可能是由于我們還未設置認證信息導致的,也就是說我們還沒有建立信息認證中心(這個稱呼著實有些大,很嚇人)。

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

? 但是,不要忘了,我們現在還不了解這個數據庫中各個表項的關聯關系,這么加只會導致牛毛越來越多,那么如何解決問題呢?很遺憾,不要想著通過Google, Baidu 來搜索答案,這個問題在網上沒有任何有價值的信息,關鍵時刻還得靠我們自己!!!

現在,我們還是回到Visual Studio,執行如下操作:

圖片1-8 ASP.NET Configuration 配置

?

單擊圖片框中的圖標,我們將得到以下界面

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

?

依次轉到Security->Users->Create User->創建用戶

圖片1-10 創建新用戶

?

?圖片1-11 用戶創建成功

?

接下來,好好享受你的WCF 之旅吧 :)

總結

以上是生活随笔為你收集整理的WCF Membership Provider的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。