2011-08-08 93 views
1

我已將一個wcf服務部署到雲中。任何人都可以通過最佳做法來指導我如何確保天藍色的終點?Windows Azure WCF安全

謝謝。

回答

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是一個很好的起點。

+0

這是否適用於Java客戶端?他們會很容易*能夠引用sts嗎?只是好奇。謝謝。 – dana

+0

是的,這種方法對於Java客戶端來說應該很好。只需按照與上面的GetToken方法相同的方法。 –

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服務,他們選擇的客戶端是無關緊要的。