문제

이 모든 것은 사용자 정의 서비스 호스트에서 호스팅되는 WebHTTP 바인딩과 관련이 있습니다 (현재는 옵션이 아닙니다).

사용자 정의 usernamepasswordvalidator와 사용자 정의 iAuthorizationPolicy를 구현했습니다. 기본 인증을 사용하도록 Endpoint의 바인딩을 구성하면 모든 것이 원하는대로 작동합니다 (사용자 정의, 사용자 정의 역할 등).

익명의 HTTP 액세스 기능도 추가하고 내 사용자 정의 구현에 익명 사용자를 기본 역할 등에 넣습니다. (인증 헤더가 전송되지 않으면).

현재 일어나는 일은 익명의 사용자에게 내 사용자 지정 코드가 적용되기 전에 401을받는 것입니다. HTTP 기본 인증 요구 사항을 끄면 인증 헤더가 모두 무시됩니다.

어떻게 구성합니까? 또는 인증 헤더를 주입하십시오, 두 가지 방법으로 (2 개의 개별 엔드 포인트를 만들지 않고) 이것을 모두 수행합니까?

도움이 되었습니까?

해결책

우선, 서비스는 익명의 통화에 올바르게 응답합니다. 사양.

둘째, 이것은 불가능합니다. 서비스를 자체 주최하고 HTTP 바인딩이있을 때 WCF는 System.net.httplistener HTTP 요청에 응답 할 수있는 인스턴스 ( System.ServiceModel.Channels.SharedHttpTransportManager.OnOpen). 이 리스너는 호출되는 메소드가 있습니다 HandleAuthentication 사용자 정의 코드가 호출되기 전에이를 추정합니다. 도전 과제 (www-authenticate)와 함께 401 응답을 다시 보내는 일이 있습니다. 이것에 대해 할 수있는 일은 없습니다. 있다면 알고 싶습니다.

그래서 당신은 다음 옵션이 남아 있습니다.

  • 두 개의 엔드 포인트
  • 클라이언트가 기본 자격 증명을 알 수 있도록 구성하십시오
  • 고객이 도전에 응답 할 수 있도록 고객을 변경하십시오.

다른 팁

나는 과거에 이것에 대한 연구를 수행했지만 2 개의 개별 엔드 포인트 (원하는 것이 아님)를 만들지 않는 한 구성을 통해 불가능하다는 것을 발견했습니다. 그것은 단순히 WCF에 의해 상자에서 지원되지 않습니다.

그러나 WCF는 매우 사용자 정의 할 수 있으며 원하는 작업을 수행하는 사용자 정의 채널/바인딩을 작성하여이를 수행 할 수 있습니다. 나는 당신이 그것을 살펴 보는 것이 좋습니다 체스를 쉬십시오 소스 코드. 시작해야합니다.

가장 좋은 방법은 역할 제공 업체를 통해 기본 역할을 구현하고 익명 사용자가 자동으로 해당 역할에 참여하도록하는 것입니다. 그런 다음 프로그래밍 방식으로 또는 정책 주입 (Aspect Oriented) 정책을 통해 특정 역할을 통해 특정 익명 액세스가 허용되도록 설정합니다.

구성을 통해이를 설정하는 경우 가능하다면 다소 어렵고 "해킹"이 될 것입니다.

나는 그렇게 생각하지 않습니다 ... 나는 당신이 다시 질문을 읽기로 결정하고 당신의 질문에 대한 마지막 진술을 알아 차렸을 때 엔드 포인트를 분리하기 위해 만들어야하는 글을 쓰고있었습니다. 그래서 대답은 아니오입니다 (내가 아는 것)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top