2017-03-02 9 views
1

로컬이 아닌 호스팅 환경에서 https 오프로드없이 ARR을 사용하고 있습니다. 즉 ARR을 요청한 요청은 https이지만 백엔드 서버로 전송 된 요청은 단지 http입니다.ARR을 사용하는 Openiddict의 Https 요구 사항

openiddict에서 https 요구 사항을 비활성화하면 구성이 http URL을 반환합니다. 이 기능을 활성화하면 백엔드 서버가 메시지를 수신 할 때 요청이 거부됩니다 (http). 이 주위에 어떤 방법이 있습니까?

답변

1

설명하는 내용은 실제로 OpenIddict를 사용하거나 사용하지 않는 ASP.NET 핵심 응용 프로그램에 영향을주는 매우 일반적인 문제이며 역방향 프록시 수준에서 TLS 종료를 수행 할 때 나타납니다.이 경우 ASP.NET 핵심 실제로 실제 체계가 무엇인지 알 수있는 방법이 없으므로, HttpRequest.Scheme은 이 아니라 http이라고 가정합니다.

실제 스키마를 복원해야 OpenIddict를 포함한 모든 미들웨어가 의도 한대로 작동하도록 복원해야합니다.

이 작업은 Microsoft.AspNetCore.HttpOverrides 패키지를 참조하고 app.UseForwardedHeaders()을 호출하여 "forwarded headers" middleware을 사용하여 수행 할 수 있습니다.

프록시에 따라 사용하는 헤더와 일치하도록 설정을 조정해야 할 수도 있습니다.

참고 :이 미들웨어는 IIS 통합 패키지를 사용할 때 자동으로 등록됩니다.

app.Use((context, next) => 
{ 
    context.Request.Scheme = "https"; 

    return next(); 
}); 

하는 것은 귀하의 등록 확인 : 당신은 여전히 ​​인라인 미들웨어를 사용하는 방식을 재정의 할 수 있습니다,

services.Configure<ForwardedHeadersOptions>(options => 
{ 
    options.ForwardedHeaders = ForwardedHeaders.XForwardedProto; 
}); 

이 방법이 작동하지 않는 경우 :이 구문을 사용하여 기본 옵션을 수정할 수 있습니다 다른 미들웨어보다 먼저.

+2

기본적으로'ForwardedHeaderOptions.RequireSymmetry'가 true이기 때문에'X-Forwarded-For'는 2 개의 엔트리를 가지고 있지만'X-Forwarded-Proto'는 1을 가지기 때문에 기본 옵션은 ARR 뒤에 작동하지 않을 것입니다. ForwardedHeaders = ForwardedHeaders.XForwardedProto'가 작동했습니다. 감사. 제가 app.UseForwardedHeaders (새 ForwardedHeadersOptions() { ForwardedHeaders = ForwardedHeaders.XForwardedProto, 을})를 사용; – pholly