>

. .net 코어 2.0 웹 API에서 IHttpContextAccessor를 사용하려고하는데 컨텍스트에 액세스 할 때 인증 구성이 제대로 작동한다는 것을 분명히 알 수 있지만 항상 (Jwn Bearer) WindowsPrincipal입니다. HttpContext에는 ClaimsPrincipal과 클레임이 있습니다. IHttpContextAccessor가 올바른 HttpContext를 사용하지 않는 이유는 무엇입니까? 예상대로 DI를 통해 서비스에 등록됩니다. 아무도 모른다? Service Fabric에서 httpsys 리스너를 사용하고 있습니다.

자세한 내용은 다음과 같습니다.

이 줄은 IServiceCollection 'services'를 구성하는 마지막 줄입니다.

services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();

이것은 AFTER 인증 (AddJwtBearer), 인증 정책, 데이터 보호, CORS 등입니다.

저는 HttpContext 정보로 로그에 기록 된 데이터를 보강하는 사용자 정의 Enricher와 함께 Serilog를 사용하고 있습니다. 이 강화제는 IHttpContextAccessor 참조로 초기화되므로 HttpContext를 호출하여 특정 정보를 로그로 가져올 수 있습니다. http 컨텍스트가 없을 때 로그가 작성되면이를 무시하지만 컨트롤러 조치 내에 로그가 작성되면 컨텍스트에서 데이터를 가져올 수 있어야합니다. 중단 점을 설정하고 컨트롤러의 HttpContext를 IHttpContextAccessor의 HttpContext에있는 것과 직접 비교하면 서로 다릅니다. 컨트롤러에서 직접 사용할 수있는 일반 항목에는 클레임이있는 ClaimPrincipal이 표시되지만 IHttpContextAccessor는 클레임이없는 WindowsPrincipal을 표시하지만 URL 및 쿼리 문자열 등이 있습니다.

주문이 주문에 영향을 줄 수 있다고 생각했기 때문에 다른 항목을 구성한 후에 주문했습니다.

Service Fabric 서비스에서 HttpSysCommunicationListener를 사용하고 있습니다.


  • 답변 # 1

    네빌의 질문에 대해 또 다른 모습을보고 생각한 후, 나는 IHttpContextAccessor 싱글 톤과 그것을 가져 와서 내 코드에 연결하는 부분을 옮겨서 ClaimsPrincipal을 선택했는지 확인할 수있었습니다. 예상대로 http 요청과 관련이없는 모든 로그의 Windows 주체가됩니다.

  • 이전 java - 정적 컨텐츠 Dropwziard 제공 중 오류
  • 다음 django - 이 형식에서 날짜를 얻는 방법 파이썬에서 2018 년 5 월 15 일 화요일 00 - 00:00 gmt-0400 (edt)