문제

다음이 필요한 프로젝트를 진행하고 있습니다.

  • 서버 측의 WCF 서비스 (.NET 3.5)
  • 클라이언트 측의 WPF 클라이언트 (.NET 3.0)

서버 측의 인증 및 승인을 사용해야하는 기존 응용 프로그램이 있습니다. 또한 WCF Service의 스레드 원금 (사이트 객체)에 사용자에 대한 메타 데이터를 저장해야합니다. 나는 절대적으로해야한다면 WCF 서비스에서 얻을 수 있도록 이것을한다. 일부 비즈니스 논리에는 필요할 수 있습니다. 그래서 내 계획은 다음을 수행하는 것이 었습니다 ...

서버에 대한 사용자 정의 ServiceauthorizationManager를 작성하면 사용자를 로그인하고 기존 응용 프로그램에서 역할을 가져옵니다. "사이트"객체를 캐시하고 추가로 캐시에서 클레임을 가져옵니다. 사용자 정의 데이터를 보유하려면 CustomPrincipal 객체도 필요합니다. WCF에서 내장 된 역할 필터링을 사용할 수 있도록 사용자를 가장하고 싶습니다.

[PrincipalPermission(SecurityAction.Demand, Role = "Role1")]
public string[] RolesForUser(string username){}

사용자 정의 역할 제공 업체와 함께 ASP.NET 인증을 사용하려고 시도했지만 현재 교장에 대해서는 아무것도 설정할 수 없었습니다. 또한 사용자 정의 iAuthorizationPolicy를 사용하려고 시도했지만 문제가 발생했습니다. 이러한 문제는 WCFClient.exe 애플리케이션을 사용할 수 있다는 점을 다루었습니다. (MEX Endpoing을 사용하여) 자격 증명이 제공되지 않으므로 로그인이 실패합니다. 나는 결국 ServiceauthorizationManager가 올바른 방법이라고 결정했지만 다른 제안에 열려 있습니다.

클라이언트에서는 자격 증명을 수집하여 다음과 같이 WCF 프록시 클래스에 넣습니다.

proxy.ChannelFactory.Credentials.UserName.UserName = userName;
proxy.ChannelFactory.Credentials.UserName.Password = password;

이 경로를 따라 가기 시작하면서 관리자 클래스의 CheckAccesscore 메소드에서 사용자 이름/비밀번호를 얻을 수 없다는 것을 알았습니다. 추가 조사에 따르면 사용자 정의 usernamepasswordvalidator를 실제로 인증해야합니다. 그래서 나는 그 중 하나를 만들었습니다. 문제는 Validate 메소드가 호출되지 않았다는 것입니다.

추가 조사에 따르면 Validate Method를 호출하려면 WCF 서비스가 메시지 또는 전송 수준 보안이 있어야합니다. 그 문제는 내가 x.509 자격증. 이 제품은 수백 개의 엄청나게 잠긴 기계에 들어가고 있으며 인증서를 설치하는 것은 불가능합니다.

인증서를 설치하지 않고 요구하는 일을 할 수있는 방법이 있습니까?

도움이 되었습니까?

해결책

짧은 대답; 당신은 할 수 없습니다. 사용자 이름/비밀번호를 사용하자마자 보안 채널이 필요합니다.

그러나 고객에게 인증서가 필요하지 않습니다. 서버에서만.

다른 팁

실제로 가능하지만 자신의 바인딩을 구현해야합니다.

Yaron Naveh는 HTTP를 통해 명확한 텍스트 사용자 이름/암호를 가능하게하는 WCF 바인딩을 개발했습니다. 그의 기사 바인딩 코드를 포함합니다.

네트워크 인프라의 세부 사항을 모르지만 Windows 도메인에 있으면 Windows 자격 증명을 고려해야합니다.

Windows 자격 증명을 사용하는 경우 인증서없이 메시지 보안을 사용할 수 있습니다. 이것은 wshttpbinding (상자 밖에서)의 기본 동작입니다.

자체 바인딩을 구현하지 않고도 구외 솔루션을 사용하여 WCF는 메시지에 인증 자격 증명이 포함될 때마다 보안 채널을 사용하도록 권장합니다.

명확한 텍스트로 자격 증명을 지정할 수있는 사용자 정의 바인딩을 사용하는 것은 반드시 솔루션이지만 사용하기 전에 두 번 생각할 것입니다.

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