2011-08-08 4 views
1

wcf 서비스가 클라우드에 배포되었습니다. 아무도 푸른 하늘의 종착지를 어떻게 확보 할 수 있는지 모범 사례를 통해 저를 뉘우칠 수 있습니까?Windows Azure WCF 보안

감사합니다.

답변

2

가장 쉬운 방법은 AppFabric 액세스 제어 서비스 (ACS)를 사용하여 권한 부여 HTTP 헤더를 통해 WCF 서비스에 전달하는 보안 웹 토큰 (SWT)을 생성하는 것입니다. 그런 다음 서비스 메소드에서 헤더에서 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의 암호입니다 : 내가 ACS에서 SWT를 얼마나

이입니다.

이 서비스를 호출하려면 : 서비스 측에

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 클라이언트에서 작동합니까? 그들은 * 쉽게 * sts를 참조 할 수 있을까요? 그냥 궁금해서. 감사. – dana

+0

예, 접근 방식은 Java 클라이언트에 잘 작동합니다. 위의 GetToken 메소드와 동일한 접근법을 따르십시오. –

2

일반적으로 광범위하게 상호 운용 가능한 접근 방식은 SSL 연결을 통해 HTTP 기본 인증을 사용하는 것입니다. Azure에서이 작업을 실행하는 방법은 기존 Windows 서버에서이 작업을 수행하는 방법과 매우 비슷합니다.

IIS Http 모듈을 구현하고 BasicAuthenticationModule을 직접 구현할 수 있습니다.하지만 원하는대로 작동 할 수 있지만 ASP.NET 멤버 자격 (ValidateUser 호출)을 호출하는 것이 일반적인 방법입니다. 이 저장소는 SQL Azure에서 호스팅 할 수 있습니다.

그러면 IAuthorizationPolicy를 구현하고이를 authorizationPolicies WCF 구성 요소에 추가하여이를 WCF로 가져올 수 있습니다.

패턴 및 프랙티스 팀은 http://msdn.microsoft.com/en-us/library/ff649647.aspx에 완전한 코드로이 연습을합니다. 간단한 Windows Forms 토론을 무시할 수 있습니다. 웹 서비스이므로 클라이언트 선택은 무의미합니다.