2012-05-18 3 views
4

TcpClient/TcpListener 기반 클라이언트 - 서버 응용 프로그램을 개발 중입니다. 이제 사용자를 인증해야합니다. PrincipalContext-Class를 서버 측에서 사용하고 클라이언트에서 username/password/domain을 요청할 수는 있지만 네트워크를 통해 자격 증명을 보내지 않습니다. 또한 사용자에게 자격 증명을 묻지 않으려 고합니다. . 따라서 통과 인증을 지원하는 Citrix Receiver를 알고 있습니다. 현재 로그온 한 사용자를 사용하며 자격 증명을 요청하지 않으며 서버에 대해 사용자를 인증합니다. 그냥 작동합니다.C#에서 패스 스루 인증 구현

내 응용 프로그램에서 어떻게합니까? 서버에 보낼 수있는 일종의 토큰을 생각했지만 해결책을 찾지 못했습니다.

+1

Citrix가이 상황에 어떤 영향을 미치는지는 모르겠지만 그렇지 않은 경우에는 Windows 위장의 후보로 들립니다. [NegotiateStream] (http://msdn.microsoft.com/en-us/library/system.net.security.negotiatestream.aspx)에서 통신을 래핑하고 적절한 'AuthenticateAs ...'메소드를 호출하면 클라이언트가 서버가 허용 할 가장 수준을 지정합니다. 서버는 스트림의 'RemoteIdentity' 속성을 사용하여 클라이언트를 가장합니다. – shambulator

+0

그 소리가 좋아. 답변으로 게시 할 수 있습니다. 이것은 분명히 이것을하는 방법입니다. 그것은 쉽습니다. 고맙습니다! – nikeee

답변

2

감싸고는 NetworkStream 및 클라이언트와 서버 모두에서 적절한 NegotiateAs... 메소드를 호출 .

클라이언트는 허용 할 가장 수준을 지정할 수 있으며 서버는 클라이언트 ID를 확인하기 위해 최소 수준 인 Identification을 지정할 수 있지만 클라이언트로 로컬 또는 네트워크 리소스에 액세스해야하는 경우 Impersonation을 지정하거나 적절한 네트워크 구성을 사용하여 Delegation을 지정하십시오.

인증되면 서버는 클라이언트의 ID를 확인하거나 NegotiateStream의 RemoteIdentity 속성을 사용하여 가장 할 수 있습니다.

내 의견에서 언급했듯이, Citrix가이 설정에 어떤 영향을 미치는지는 모르지만 (응용 프로그램을 사용하지 않았 음), 기본적으로 응용 프로그램에 완전히 투명하고 모든 것이 표준 Windows 자격 증명을 사용하면 작동합니다.

0

응용 프로그램의 클라이언트와 서버 부분을 모두 작성하는 경우 네트워크를 통과하고 다른 쪽 끝에서 해독하기 위해 사용자의 자격 증명을 암호화 할 수 있습니다.

클라이언트 컴퓨터에서 악의있는 ​​사용자가 응용 프로그램 (strings 등을 사용하여)에서 암호화 키를 추출 할 수 있다고 생각하면 대칭 암호화가 적합하지 않습니다. 따라서 비대칭 (공개 - 개인) 암호화가 적합 해 보입니다. 한 쌍의 키를 생성하면 서버의 키는 비공개로 남아 있어야하며 (서버에서만) 클라이언트의 키가 클라이언트 시스템의 응용 프로그램에 포함될 수 있습니다. 그런 다음 자격 증명이 서버의 비밀 키와 보안 개인 키로 만 해독 될 수 있기 때문에 키가 앱에서 추출되는지는 중요하지 않습니다. This class은 대부분의 기본 작업을 수행했습니다.

+0

** ** 모든 자격 증명을 사용하고 싶지 않습니다.내 클라이언트 응용 프로그램이 현재 로그온 한 사용자를 얻고 인증을 통과하도록하여 사용자가 자격 증명을 묻지 않고 자동으로 로그인되도록합니다. 가능하지만 어떻게해야할지 모르겠다. – nikeee

1

닷넷 프레임 워크에 대한 기능을 가지고있다 디피 - HELLMANN 키 교환하십시오 NegotiateStream에서

http://de.wikipedia.org/wiki/Diffie-Hellman-Schl%C3%BCsselaustausch

http://www.codeproject.com/Articles/24632/Shared-Key-Generation-using-Diffie-Hellman

+0

암호화 된 연결을 구현하려면 SSlStream 클래스를 사용합니다. 난 그냥 NetworkStream 주위에 그것을 감쌌다. http://msdn.microsoft.com/en-us/library/system.net.security.sslstream.aspx 하지만 그건 내가 찾고있는 것이 아닙니다. – nikeee

관련 문제