WCF 4.0是否有模擬類/模塊/ WCF REST Starter Kit的RequestInterceptor?WCF 4.0的模擬WCF REST入門套件的RequestInterceptor?
回答
沒有任何內容將1-1映射到它,但是您可以使用WCF核心中的IDispatchMessageInspector來實現RequestInspector將執行的大多數場景。 http://blogs.msdn.com/b/carlosfigueira/archive/2011/04/19/wcf-extensibility-message-inspectors.aspx的帖子中有一些關於消息檢查員的詳細信息。
愛德華多,你問:@carlosfigueira:我可以用它來實現認證子系統嗎?
我正在研究同一個問題,並且至少爲您和即將推出的基於授權標頭的解決方案(如下所述)提供解決方案(我相信您正在考慮「攔截」)。
,以確保基於模型REST WebHttp編程WCF 4端點最簡單的方法是這樣的:
- 問題一個共享密鑰和API密鑰給每一個客戶作爲憑證使用。 API密鑰與用戶名真正相同。
- 通過SSL運行所有端點以確保您始終具有通道/消息/數據安全性
- 要求客戶端使用共享密鑰來生成包含時間戳記及其API的HMAC-SHA1(或equiv)散列簽名字符串鍵。
- 要求客戶端傳遞的這些所有3作爲查詢字符串參數在每個請求中:
- 簽名
- 時間戳
- API密鑰
- 實施例:https://127.0.0.1/RestEndpoint?Sig= {sigString} & ApiKey = {apiKey } & TimeStamp = {timeStamp} &您的所有其他參數...
- 在你的服務端,實現認證方法,它的所有3個字符串,然後:
- 查找該API密鑰,並返回客戶端的共享祕密,你有一個DB或其他地方。
- 將時間戳與DateTime.Now進行比較以確保請求不超過15分鐘以抵禦重播攻擊。
- 使用這3個字符串,重新創建簽名字符串並將其與客戶端傳入的字符串進行比較。
- 如果它們匹配,請求者是真實的。現在
,更好的方式來做到這一點是通過使用HTTP授權請求報頭存儲的3串,並有一個全球性的攔截十歲上下的過程看所有請求。這將防止沒有身份驗證塊的暴露端點的可能性(至少,其可能性較低)。
使用查詢字符串來傳遞所有這些信息的問題是查詢字符串的最大長度爲2k(因客戶端/瀏覽器而異),並且查詢字符串在調試時非常難以讀取......但只是得到使用到它。
有人認爲更復雜的方法是STS模型,您需要客戶端將這3個身份驗證字符串傳遞給安全令牌服務端點。響應消息會傳回一個會話令牌,客戶端會在每個呼叫中傳遞一個會話令牌來代替3個字符串。確實,對於客戶端而言,在每次調用時都不需要生成HMAC哈希簽名,但服務器端仍必須對令牌進行身份驗證,並且會話概念會導致乾淨的RESTful無狀態行爲。
我會盡我所能發佈實現查詢字符串和auth頭文件方法的代碼塊。
我回來了一個更新。
我碰巧重視代碼的簡單性,並且在成功解決了這個問題後,我不能說我比查詢字符串方法更喜歡它。將一次調用放入每個調用AuthN方法並與AuthZ方法並行的服務端點似乎比一些人認爲的更容易。
無論如何,足夠的意見......對解決方案。該解決方案是正確的在我們的#2的眼睛在這個環節,但於我們而言不是很好的描述......所以我會給予信貸「user634119」示例代碼這裏找到: Headers in OperationContext
首先,我們需要添加一個serviceBehavior我們的web.config文件:
<behaviors>
<serviceBehaviors>
<behavior>
<serviceAuthenticationManager serviceAuthenticationManagerType="WCF.BasicAuthorization, WCF"></serviceAuthenticationManager>
<serviceAuthorization impersonateCallerForAllOperations="false" principalPermissionMode="Custom" serviceAuthorizationManagerType="WCF.BasicAuthentication, WCF">
</serviceAuthorization>
</behavior>
</serviceBehaviors>
</behaviors>
下使一個類(稱爲BasicAuthorization如serviceBehaviors引用上述塊):
//Authorize the call against the URI resource being requested...
public class BasicAuthorization : ServiceAuthorizationManager
{
public override bool CheckAccess(OperationContext operationContext,
ref Message message)
{
//some code
}
}
下使身份驗證類:
// Authenticate the header signature as described in my previous post
public class BasicAuthentication : ServiceAuthenticationManager
{
public override ReadOnlyCollection<IAuthorizationPolicy> Authenticate(
ReadOnlyCollection<IAuthorizationPolicy> authPolicy, Uri listenUri,
ref Message message)
{
//some code
}
}
在驗證方法,使用HttpRequestMessageProperty拉動請求頭細節出並執行在我的第一應答描述的相同的3個步驟。
我一直在閱讀/關注如何保護用WCF 4.0實現的基於REST的服務。沒有一個提供了一個簡單的解決方案。但是這似乎是實現身份驗證和授權的最優雅的解決方案。 – 2013-10-09 14:45:56
- 1. WCF REST入門套件未能安裝
- 2. 使用CDATA和WCF REST入門套件
- 3. WCF REST RequestInterceptor身份驗證
- 4. WCF 4.0中的RequestInterceptor REST服務應用程序
- 5. Autofac + WCF REST 4.0
- 6. 錯誤的請求:使用入門套件的WCF REST服務
- 7. WCF REST StarterKit和RequestInterceptor線程安全
- 8. 是否可以使用來自WCF REST入門套件的RequestInterceptor實現重定向器/反向代理
- 9. WCF REST安全模擬
- 10. WCF REST入門套件是否死在水中......現在呢?
- 11. 使用WCF REST服務入門套件檢索EF4 POCO
- 12. wcf rest入門套件預覽2錯誤:需要VS 2008 SP1
- 13. WCF REST入門套件 - 支持多種資源?
- 14. WCF REST入門套件是否仍然最新?
- 15. wcf休息入門套件2
- 16. 使用WCF Rest入門套件使用使用REST服務的InternalServerError(500)
- 17. 如何驗證RequestInterceptor(WCF REST入門工具包)中的Content-MD5頭(從實際內容) - REST Web服務
- 18. WCF 4.0:WebMessageFormat.Json不能與WCF REST模板一起使用
- 19. 如何創建HTTP POST請求的主體內容與WCF REST(入門套件)
- 20. WCF 4.0 WCF 4.0的新增功能
- 21. WCF Internet Explorer(入門)
- 22. 如何單元測試使用WCF Rest入門套件構建的WCF客戶端
- 23. RequestInterceptor中的ProcessRequest永不結束[WCF]
- 24. 改變默認的WCF REST 4.0 helppage
- 25. WCF Rest .NET 4.0未處理的異常
- 26. 上傳文件從Android(2.3.4)到WCF 4.0 REST服務與WCF模板40
- 27. WCF休息入門套件OnGetItems:格式化的IEnumerable <KeyValuePair .. XML
- 28. 如何使用WCF 4.0模板上傳文件(REST)
- 29. WCF Rest 4.0聯機模板中的錯誤處理
- 30. 在WCF RequestInterceptor內部訪問HttpContext
我可以用它來實現驗證子系統嗎? – pyon 2011-05-17 15:03:59