문제

System.net.credentialCache.DefaultCredentials를 사용하여 현재 사용자 자격 증명을 WebService에 전달하면 정보가 어떤 방식으로 전송됩니까? 나는 그것이 명확한 텍스트가 될 것이라고 생각하지 않으므로 자격 증명을 암호화해야하지만 어떻게합니까?

도움이 되었습니까?

해결책

서버가 헤드 응답에서 요청한 내용에 따라 다릅니다.

예를 들어, 웹 서비스에 헤드 요청을 수행하고 응답의 HTTP 헤더 중 하나가 "www-authenticate : ntlm"인 경우, 기본적으로 저장된 자격 증명은 NTLM을 사용하여 암호화 된 다음 전체 get과 함께 전송됩니다. /post/put/뭐든지. 이를 위해 웹 서버가 NTLM 인증을 요청하도록 구성되어 있는지 확인해야합니다. IIS에서는 "통합 된 Windows 인증"을 선택하는 경우입니다. 나는 Tomcat에 대해 확실하지 않지만 이 게시물 적절 해 보인다.

그러나 웹 서버가 특정 리소스의 "www-authenticate : BASIC"으로 답장하는 경우 (명확한 텍스트로 크레드를 보내고 인코딩 된 (참고 : 참고 : 참고 : ~ 아니다 암호화)) Base64)로서, 기본 인증을 통해 계정의 자격 증명을 보내는 보안 예외로 간주되므로 인수 지출을 얻을 수 있습니다.

웹 서버는 여러 인증 방법을 수락하도록 구성 할 수도 있지만 항상이 중 가장 약한 것을 수락 할 준비가되어 있어야하므로 기본 인증을 "낙상"으로 제공하면 일부 사용자가 자격 증명을 보낼 수 있음을 의미합니다. 명확한 문구.

브라우저는 일반적으로 사용할 수있는 가장 강력한 방법을 선택하며 .NET 라이브러리가 같은 방식으로 작동한다고 생각합니다.

편집하다

웹 서버만큼 웹 서비스에 NTLM을 요청하면 현명한 클라이언트가 명확한 텍스트로 자격 증명을 보내지 않도록 할 수 있습니다. .NET 프레임 워크의 순 클래스를 사용하면 DefaultCredentials를 사용하고 기본 인증 헤더를 수동으로 주입하지 않으면 자격 증명이 NTLM을 사용하여 암호화됩니다.

그들의 자격 증명은 서버에 큰 암호화 혼란으로, 웹 서버를 제외한 누구에게도 큰 암호화 혼란으로 도착합니다. 웹 서버는 현재 로그인 한 사용자의 사용자 이름, 비밀번호 및 도메인을 포함하는 것을 확인할 것입니다.

자격 증명 기본값은 보낼 수있는 신청 유형에 따라 다릅니다. 사용자 계정에서 실행되는 클라이언트 응용 프로그램 인 경우 자격 증명이 해당 사용자의 것입니다. 웹 서비스와 통신하는 ASP.NET 응용 프로그램 인 경우 앱 풀이 실행중인 계정의 자격 증명을 기본적으로 사용합니다. NETWORK_SERVICE.

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