1
A
回答
2
在我看來,最簡單的方法是使用AppFabric訪問控制服務(ACS)生成一個安全Web令牌(SWT),通過授權HTTP頭傳遞給WCF服務。在服務方法中,您可以從頭文件中讀取並驗證SWT。
這很簡單,特別是如果您動態創建代理而不是使用服務引用。
這是我從ACS獲得SWT:
private static string GetToken(string serviceNamespace, string issuerKey, string appliesto)
{
WebClient client = new WebClient();
client.BaseAddress = String.Format("https://{0}.accesscontrol.windows.net", serviceNamespace);
client.UseDefaultCredentials = true;
NameValueCollection values = new NameValueCollection();
values.Add("wrap_name", serviceNamespace);
values.Add("wrap_password", issuerKey);
values.Add("wrap_scope", appliesto);
byte[] responseBytes = client.UploadValues("WRAPv0.9", "POST", values);
string response = System.Text.Encoding.UTF8.GetString(responseBytes);
string token = response
.Split('&')
.Single(value => value.StartsWith("wrap_access_token=", StringComparison.OrdinalIgnoreCase))
.Split('=')[1];
return token;
}
issuerKey
,因爲它是在ACS V1提到現在從服務標識在ACS V2密碼。
撥打服務:
string accessToken = GetToken(serviceNamespace, issuerKey, appliesto);
string authHeaderValue = string.Format("WRAP access_token=\"{0}\"", HttpUtility.UrlDecode(accessToken));
// TInterface is the service interface
// endpointName refers to the endpoint in web.config
ChannelFactory channelFactory = new ChannelFactory<TInterface>(endpointName);
TInterface proxy = channelFactory.CreateChannel();
OperationContextScope scope = new OperationContextScope(proxy as IContextChannel);
WebOperationContext.Current.OutgoingRequest.Headers.Add(HttpRequestHeader.Authorization, authHeaderValue);
// Call your service
proxy.DoSomething();
在服務端,您提取頭中的令牌和驗證。如果這看起來像你想採取的方法,我可以找出代碼。
嘗試this blog post作者:Alik Levin是一個很好的起點。
2
一個典型的,廣泛互操作的方法是通過SSL連接使用HTTP基本認證。在Azure中運行此方法的方法與在傳統Windows服務器上實現此方法非常相似。
您可以實現一個IIS Http模塊並提供您自己的BasicAuthenticationModule實現 - 不過您可以使用它,但調用ASP.NET Membership(對ValidateUser的調用)將是一種常用方法。這個商店可以託管在SQL Azure中。
然後,您可以通過實現IAuthorizationPolicy並將其添加到您的authorizationPolicies WCF配置元素中,將其表面顯示爲WCF。
模式和實踐團隊對此進行了演練,完成代碼爲 http://msdn.microsoft.com/en-us/library/ff649647.aspx。您可以忽略簡短的Windows Forms討論 - 作爲Web服務,他們選擇的客戶端是無關緊要的。
相關問題
- 1. Windows Azure:安全問題
- 2. wcf windows集成安全
- 3. Azure上的安全WCF服務
- 4. 集成安全Windows Azure虛擬機
- 5. WCF客戶端安全默認爲Windows
- 6. WCF netTcpBinding Windows安全加密和簽名
- 7. Windows服務中的WCF安全
- 8. WCF安全使用Windows身份驗證
- 9. WCF NetTcpBinding安全
- 10. WCF消息安全
- 11. WCF安全認證
- 12. WCF安全綁定問題
- 13. WCF安全傳輸安全問題
- 14. WCF安全跨域
- 15. WCF 4.0安全
- 16. mvc wcf安全
- 17. WCF安全錯誤
- 18. WCF安全建議
- 19. WCF安全問題
- 20. WCF安全錯誤
- 21. Windows Azure上的WCF會話
- 22. WCF安全失敗
- 23. WCF安全協商例外
- 24. WCF wsHttpBinding安全錯誤
- 25. WCF REST安全模擬
- 26. WCF安全與域組
- 27. WCF傳輸安全
- 28. WCF安全問題
- 29. WCF Web API安全
- 30. 安全例外WCF
這是否適用於Java客戶端?他們會很容易*能夠引用sts嗎?只是好奇。謝謝。 – dana
是的,這種方法對於Java客戶端來說應該很好。只需按照與上面的GetToken方法相同的方法。 –