2017-12-20 16 views
6

현재 웹 클라이언트 용 기능을 제공하는 MainAPI와 모든 인증 요청을 처리하는 AuthAPI가 있으며 두 가지 프로젝트가 있습니다. netcore 2.NetCore 2를 사용하는 JWT 원격 인증에서 오류가 발생했습니다.

AuthAPI를 직접 호출하면 원하는대로 요청을 처리합니다.

MainAPI 요청을 AuthAPI에서 인증하려고 시도 할 때 AuthAPI 안팎으로 들어오는 요청을 볼 수 있지만 그렇게하지 못합니다.

public class BackChannelHttpHandler : HttpMessageHandler 
    { 
     protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) 
     { 

      HttpClient client = new HttpClient(new HttpClientHandler(), disposeHandler: false);   
      client.DefaultRequestHeaders.Add("Accept", "application/json"); 
      var res = await client.GetAsync(request.RequestUri); 
      return res; 
     } 
    } 

다음과 같이 내가 권한을 부여 주석으로 부르고 컨트롤러 :

여기
services.AddAuthentication(option => 
       option.DefaultAuthenticateScheme = "Bearer") 
       .AddJwtBearer(options => 
       { 
        options.MetadataAddress = "http://localhost:5019/auth/api/info"; 
        options.Authority = "http://localhost:5019"; 
        options.Audience = AUDIENCE; 
        options.RequireHttpsMetadata = false; 
        options.SaveToken = true; 

        options.BackchannelHttpHandler = new BackChannelHttpHandler(); 

        options.IncludeErrorDetails = true; 

       }); 

이 BackChannelHttpHandler 클래스 :

여기

는 MainAPI Startup.cs 내 서비스 인증 구성입니다
[Authorize(AuthenticationSchemes = "Bearer")] 

AuthAPI는 Startu에서 Cors를 구성했습니다. p.cs :

services.AddCors(options => 
    { 
     options.AddPolicy("CorsConfig", 
         builder => builder 
          .AllowAnyOrigin() 
          .AllowAnyHeader() 
          .AllowAnyMethod() 
          .AllowCredentials() 
          .Build()); 
}); 

AuthAPI 컨트롤러에는 [EnableCors("CorsConfig")] Annotation도 있습니다.

AuthAPI 컨트롤러에 대한 호출을 얻을 수 있으며 HTTP-200을 반환하지만 MainAPI에서 인증 프로세스의 무언가가 호출되면 Unauthorizes가 발생하고 MainAPI 컨트롤러에 대한 호출이 실행되지 않습니다.

내 questio는 MainAPI 인증 프로세스에서 내가 뭘 잘못하고, 자체적으로 토큰을 인증하며 요청을 무효화합니다.

+0

MainAPI 서버에서 AuthAPI에 전화 하시겠습니까? 통화는 어떻게 생겼습니까? –

답변

0

이 매개 변수에주의하십시오 options.Audience; 사용할 수있는 엔드 포인트가 있어야합니다.

또는 더 많은 생산성을 위해 응용 프로그램간에 키를 공유 할 수 있습니다. 각 엔드 포인트는 토큰에서 페이로드를 읽을 수 있지만 인증 서버 만 토큰을 생성 할 수 있습니다.

+0

내가 아는 한 관객은 어떤 문자열이 될 수 있습니다. 나는 CORS 통화를 포함하여 성공한 "사용자"를 사용합니다. –