2012-07-05 167 views
5

在服務器(「本地」)上有一個動態CRM實例。它將用於幾個網站,它們運行在遠程機器上(另一個域,另一個Active Directory)。這些站點與CRM實例之間的通信通過CRM代理,位於其附近(靠近CRM)的WCF服務,處理請求,查詢CRM等完成。WCF:身份驗證服務或基於令牌的安全性?

WCF服務面向Internet。儘管安全通信渠道不是必需的,但認證是。我們不能讓隨機客戶端使用CRM代理提供的服務。

所以,身份驗證服務(cookie?)/手寫編碼令牌傳遞(作爲每個服務操作的參數)/ this solution - on stackoverflow

預先感謝您!

PS:手動編碼的令牌將是「時間敏感的」,並用一些祕密密鑰散列幾次。中間人可能不是一個很大的問題,因爲在請求後令牌可能失效。

回答

8

手動編碼的令牌傳遞不是很優雅。它污染你的方法簽名,並使你重複檢查遍佈整個地方。

如果您能夠向您的服務客戶端分發憑證,或者傳遞他們已經用於您系統的憑證,那麼我建議使用自定義用戶名&密碼驗證程序來使用郵件安全。

實施它的步驟are simple enough。你只需要實現一個UserNamePasswordValidator

從鏈接的文章很短的配置摘要:

指定安全模式在你的綁定:

<security mode="Message"> 
    <message clientCredentialType="UserName"/> 
</security> 

在服務行爲添加:

<serviceCredentials> 
    <userNameAuthentication 
     userNamePasswordValidationMode="Custom" 
     customUserNamePasswordValidatorType="YourFullUserNameValidatorType"/> 
</serviceCredentials> 

然後客戶端只需要直接在服務代理上設置他們的憑證。所以他們沒有通過服務運營。

serviceClient.ClientCredentials.UserName.UserName = "username"; 
serviceClient.ClientCredentials.UserName.Password = "password"; 

UserNamePasswordValidator將獲得這些證書爲每個服務操作調用,你將不得不驗證它們對你的憑證存儲庫的機會。

但是,爲了更安全起見,您可以查看certificate authentication。這是更可靠的,你不需要從CA購買證書。如果您還可以在客戶端計算機上將自己設置爲CA,那麼您可以輕鬆前往。尤其是因爲你只有少數客戶,所以他們很容易管理。

相關問題