2010-08-17 5 views
2

우리는 데이터에 액세스하기 위해 WCF 서비스를 호출하는 일부 응용 프로그램 (웹 및 WPF)이 있습니다. 우리는 Windows 인증을 사용하지 않습니다. 웹 응용 프로그램이나 WPF 데스크탑 응용 프로그램에 로그인 할 때 사용자 이름과 암호를 입력하라는 메시지가 나타납니다. 데이터의 기밀 정보가 크지 않습니다 (즉, 신용 카드, SSN 등).WCF 인트라넷 보안 구성

WCF 끝점에 BasicHttpBinding을 사용하고 싶습니다. 그러나 우리는 사용자에 따라 특정 데이터에 대한 액세스를 제한 할 수 있도록 WCF 서비스에 사용자 이름과 암호를 전달하려고합니다.

내 질문에 우리는 인트라넷 환경에서 100 %이므로 SOAP 메시지의 헤더에 사용자의 사용자 이름과 암호를 전달하면 WCF 측에서 사용자를 인증 할 수 있습니다. 이것은 매우 일반적인 상황 인 것처럼 보이고 모든 응용 프로그램과 서비스가 인트라넷 환경에있을 때 다른 사람들이 WCF 측면에서 보안을 처리 한 방법이 궁금합니다.

감사합니다.

답변

2

WCF 팀이 보안되지 않은 채널을 통해 일반 텍스트 사용자 이름 토큰을 보내는 것이 허용되지 않으므로 실제로는 매우 어렵습니다. 사용자 SOAP 헤더에서 사용자 이름과 암호를 보낼 수는 있지만이 경우 WCF 보안 인프라를 잃게되며 사용자가 직접 암호 확인 동작을 삽입해야합니다.

일반 텍스트 사용자 이름 토큰이 정말로 필요한 경우 이 binding을 확인하십시오.

편집 : Btw. 대부분의 보안 공격은 내부자가 HTTPS를 사용하는 것이 나쁜 결정이 아니므로 더 쉽게 할 수 있다는 것을 기억하십시오.

+0

나는 그게 상식 일 거라고 생각합니다. 보안을 단순하게 유지함으로써 개발을 단순화하고 성능을 향상 시키거나, 언젠가 악성 직원이 될 수도 있기 때문에 HTTPS 및 wsHttpsBinding을 사용하여 개발 복잡성을 높이고 성능을 약간 저하시킬 수 있습니까? – ChrisNel52

+1

이 경우 개발을 단순화하지 않습니다. HTTPS 사용은 간단합니다. HTTPS를 피하면 해결 방법을 의미합니다. –

1

예, 이것은 합리적 일 것입니다. 그러나 사용자가 인트라넷에있는 경우에도 암호를 암호화해야합니다. WireShark와 같은 네트워크 스니퍼를 사용하는 모든 사용자는 통신 내용을 볼 수 있으며 암호를 암호화하지 않으면 직원이더라도 암호를 가져올 수 있습니다 (내부 보안을 완전히 무력화 시킴) 즉, 직원을 너무 많이 신뢰하지 않으면 사용자 이름과 암호가 아무 의미도없는 것입니다.

+0

나는 항상이 시나리오에 어려움을 겪고 있습니다. 예를 들어 WPF 데스크톱 응용 프로그램은 사용자에게 암호를 묻습니다. 즉, WPF 앱에서 WCF 서비스로 암호를 전달하기 전에이를 암호화해야합니다. 하지만 사용자의 데스크톱 PC에 암호화 키를 저장하려면 어떻게해야합니까? app.config 파일에 저장하고 싶지 않습니다. – ChrisNel52

0

암호를 일반 텍스트로 보내서는 안됩니다. 어떤 사람들은 다른 것들에 대해 동일한 암호를 사용합니다. 다른 사람의 암호를 훔쳐 내면 응용 프로그램이 절대로 손상되지 않아도 (심지어 희생자가 누수의 원인을 알지도 못함) 신원 도용의 심각한 사례가 발생할 수 있습니다.

암호가 해시 된 이유가 있습니다 - 컴퓨터가 사용자의 암호를 모르더라도!

1

wcf 3.5 sp1을 사용하는 경우 보안이 맞지 않는 바인딩에서 사용자 이름과 비밀번호를 허용 할 수 있습니다. 보안 전송의 AllowInsecureTransport을 true로 설정하면됩니다.