2011-08-08 19 views
1

私はクラウドにwcfサービスを導入しました。誰もが私が晴れの中でどのようにエンドポイントを確保できるかについてのベストプラクティスを通して私を導くことができますか?Windows Azure WCFセキュリティ

ありがとうございました。

答えて

2

私の意見では、AppFabricアクセスコントロールサービス(ACS)を使用して、承認HTTPヘッダーを介してWCFサービスに渡すSecure Web Token(SWT)を生成するのが最も簡単な方法です。サービスメソッドでは、ヘッダーから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の中にサービスIDからパスワードです。 、あなたはヘッダからトークンを抽出し、それを検証し、サービス側で

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(); 

:サービスを呼び出すために

。これは、あなたが取るべきアプローチのように見える場合、私はそれのためのコードを見つけることができます。

Alik Levinによってthis blog postを試してみてください。

+0

これはJavaクライアントでも機能しますか?彼らは簡単にstを参照することができるでしょうか?ちょっと興味があるんだけど。ありがとう。 – dana

+0

はい、アプローチはJavaクライアントにとってうまくいくはずです。上記のGetTokenメソッドと同じアプローチに従ってください。 –

2

広く一般的な相互運用可能なアプローチは、SSL接続でHTTP基本認証を使用することです。これをAzureで実行する方法は、従来のWindowsサーバーでこれを達成する方法と非常によく似ています。

IISのHttpモジュールを実装し、独自のBasicAuthenticationModuleを実装することができます。ただし、ASP.NETのメンバシップ(ValidateUserへの呼び出し)を呼び出すのが一般的です。そのストアはSQL Azureでホストできます。

これは、IAuthorizationPolicyを実装して、これをあなたのauthorizationPolicies WCF config要素に追加することで、WCFに公開できます。

パターンとプラクティスのチームは、 http://msdn.microsoft.com/en-us/library/ff649647.aspxに完全なコードでこのウォークスルーを行っています。あなたは簡単なWindowsフォームのディスカッションを無視することができます - ウェブサービスであり、彼らのクライアントの選択は無関係です。

関連する問題