2016-06-29 3 views
1

웹 API 컨트롤러를 통합 테스트하려고합니다. 응용 프로그램은 JWT를 사용하여 자원 서버에 대해 사용자를 인증합니다.통합 테스트 identityserver3과 함께 베어러 인증을 사용하는 ASP.NET WebAPI 컨트롤러

응용 프로그램을 스풀링하기 위해 Microsoft.OWIN.Testing에있는 TestServer를 사용하고 있습니다.

브라우저에서 할 수있는대로 로그인을 수행하여 유효한 JWT를 얻을 수 있습니다. 그런 다음 다음과 같이 요청에 JWT를 추가합니다.

request.AddHeader("Authorization", "Bearer " + accessToken.RawData); 

해당 헤더도 OWIN 파이프 라인에 도착합니다. 그러나 [Authorize] -attribute로 보호 된 모든 컨트롤러는 호출 될 때 401 Unauthorized을 반환합니다. 이 API는 Thinktecture에 의해 IdentityServer3를 사용하여 보호

는 관련 섹션은 다음과 같습니다

var authority = "http://localhost:8080/idsrv/"; 
var parameters = new TokenValidationParameters() { ValidAudiences = new[] { "implicitclient" } }; 

var options = new IdentityServerBearerTokenAuthenticationOptions 
        { 
         Authority = authority, 
         TokenValidationParameters = parameters 
        }; 

app.UseIdentityServerBearerTokenAuthentication(options); 

var configuration = new WebApiConfiguration(this.container); 
configuration.Configuration(app); 

정말 그래서 어떤 도움이 감사 문제에 대한 포인터를 찾을 위치를 알 수 없습니다.

답변

3

토큰 미들웨어로 실제로 테스트 하시겠습니까? 제 말은 - 토큰 미들웨어 자체를 테스트하지 않고 특정 인증 결과에 기반한 컨트롤러 로직을 의미합니다.

테스트 할 일부 ClaimsPrincipal에 Context.Authentication.User을 설정하는 작은 인라인 미들웨어를 작성하십시오.

app.Use(async (ctx, next) => { ctx.Authentication.User = somePrincipal; await next() };

+0

덕분에 제안, 난 정말 그 생각을하지 않았다. 이제는 너무 쉽습니다. :-) – cguedel

관련 문제