2015-01-09 3 views
0

우리 팀에는 수동 MVS 기반 웹 사이트와 수동 페더레이션 인증에 의해 보호되는 WebAPI가 있습니다. 그것은 모두 제대로 작동합니다. 문제는 자동 배포 후에 웹 사이트와 웹 API를 테스트해야한다는 것입니다. 테스트 코드가 웹 사이트에 액세스 할 권한이있는 사용자에 의해 실행된다고 가정하고 자동 테스트 코드로 FEDAUTH 쿠키를 인증하고 웹 사이트에 가져 오는 방법은 무엇입니까?패시브 인증에 의해 보호되는 웹 응용 프로그램 테스트

답변

0

웹 API에서 활성 인증을 지원할 수 있습니다. 구성 및 인증 처리기를 변경하려면 약간의 작업이 필요하지만 프로그램 클라이언트에서도 웹 API에 쉽게 액세스 할 수 있습니다. 자동화 된 테스트 코드에서 FEDAUTH 쿠키를 얻으려는 경우 다음 코드 샘플을 사용할 수 있습니다. 브라우저를 모방하여 사용자 토큰을 웹 사이트에 게시하고 쿠키를 다시 얻습니다.

 // The code needs the STS server and the website url 
     var stsUrl = "https://your_STS"; 
     var serviceUrl = "https://your_Service"; 

     // Use Windows Credential to get the token 
     var binding = new WSHttpBinding(SecurityMode.Transport); 
     binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Windows; 
     var factory = new WSTrustChannelFactory(binding, stsUrl) { TrustVersion = TrustVersion.WSTrust13 }; 
     // Override current login user credential if needed: 
     // factory.Credentials.Windows.ClientCredential = userCredential; 

     var rst = new RequestSecurityToken 
     { 
      RequestType = RequestTypes.Issue, 
      KeyType = KeyTypes.Bearer, 
      AppliesTo = new EndpointReference(serviceUrl) 
     }; 

     RequestSecurityTokenResponse rstr; 
     var token = factory.CreateChannel().Issue(rst, out rstr); 
     var fedSerializer = new System.IdentityModel.Services.WSFederationSerializer(); 
     var rstrContent = fedSerializer.GetResponseAsString(rstr, new WSTrustSerializationContext()); 

     // After this the security token is acquired and saved in rstrContent 

     var client = new HttpClient(); 

     // Initiate a request to the service, which will be redirected to STS. Read WS fed fields from redirected URL. 
     var response = client.GetAsync(serviceUrl).Result; 
     response.EnsureSuccessStatusCode(); 
     var redirectQuery = response.RequestMessage.RequestUri.Query; 
     var queryParams = System.Web.HttpUtility.ParseQueryString(redirectQuery); 

     // construct a authentication form 
     var formData = new Dictionary<string, string> 
     { 
      {"wa", queryParams["wa"]}, 
      {"wresult", rstrContent}, 
      {"wctx", queryParams["wctx"] }, 

     }; 

     // post the authentication form to the website. 
     response = client.PostAsync(serviceUrl, new FormUrlEncodedContent(formData)).Result; 
     response.EnsureSuccessStatusCode(); 

     // After this, the auth cookie is set in this HttpClient that you can use to access your service