2010-05-20 2 views
6

웹 서비스를 개발 중이며 GET 방법으로 서비스에 사용자 이름과 암호를 보내야합니다. ssl과 같은 보안 채널을 통해가는 한이 정보를 uri에 보내면됩니까? 즉,/users/{username}/{cleartext_password}와 (과) 비슷한 uri를 가질 수 있습니까?웹 서비스에 사용자 이름과 암호 보내기

편집 : 죄송합니다. 명확하지 않습니다. 웹 서비스는 근본적으로 단지 사용자 이름과 해시 된 암호의 데이터베이스입니다. 원격 데이터베이스에 사용자 이름과 암호를 유지하는 데스크탑 응용 프로그램을 상상해보십시오. 최종 사용자는 사용자 이름과 암호를 응용 프로그램에 입력하고 응용 프로그램은 웹 서비스에 액세스하여 사용자를 인증합니다.

따라서 애플리케이션은 최종 사용자의 사용자 이름과 일반 텍스트 비밀번호를 서비스에 전송해야합니다. 이 서비스는 사용자 이름과 암호를 사용하여 사용자 이름과 암호의 해시가 데이터베이스의 사용자 이름과 해시 된 암호와 일치하는지 확인합니다. 응용 프로그램 자체는 서비스에 액세스하기 전에 인증해야하지만 최종 사용자를 인증하는 서비스에 최종 사용자의 사용자 이름과 암호를 보내는 가장 좋은 방법은 무엇인지 궁금합니다. 나는 단순히 인증하기 때문에 서버의 상태를 변경하지 않기 때문에 POST 메소드를 사용하지 않아도된다. 혼란을 드려 죄송합니다.

답변

0

일반적으로 이것은 좋은 생각이 아닙니다.이 데이터는 여러 로그 파일에 존재하므로 결과를 볼 수없는 사람들에게 데이터가 표시 될 수 있습니다. 가능하다면 최소한 보내기 전에 해시 또는 암호화해야합니다. 이 보안 채널을 통해 무슨 일 경우

여기 Is an HTTPS query string secure?

+0

또는 양방향 SSL 인증을 수행 할 수 있습니다.사용자는 서버와 동일한 방식으로 인증서를 필요로하지만 서버는 사용자를 안전하게 인증 할 수 있습니다. 예를 들어, – mpez0

0

... 좀 더 세부 사항에 대한 관련 논의이며, 일반 텍스트로 아이디와 암호를 송신 아무 문제가 없습니다. 나는 안전하지 않은 채널을 통해 일반 텍스트로 보내지 말고 각 요청에 대해 반복적으로 보내지 말 것을 권장합니다.

당신이 할 수있는 일은 먼저 웹 서비스를 인증하고 (ssl을 통해 일반 텍스트로 사용자 이름과 암호를 보내면) 인식 할 서버에서 토큰을 얻는 것입니다. 그런 다음 각 요청과 함께 토큰을 보냅니다.

+0

Google을 사용하면 SSL을 통해 사용자 이름과 비밀번호를 보내 API에 대한 SID를 검색 할 수 있습니다. 그런 다음 각 GET 요청과 함께 쿠키에 SID를 전송합니다. 그것은 잘 작동합니다. – EAMann

7

이렇게하십시오.

"키"와 "다이제스트"를 보냅니다.

"키"는 사용자 이름과 동일합니다.

"digest"는 키의 SHA1 (또는 MD5) 해시, URI 및 "공유 된 암호"또는 암호입니다.

서버가이 메시지를 받으면 요청 된 키, URI 및 "공유 비밀"또는 암호를 기반으로 자신의 버전의 다이제스트를 계산합니다. 다이제스트를 일치시키지 않으면 401 오류 응답입니다.

+0

사실 매우 우아한 솔루션입니다 ... – EAMann

0

SSL은 URI를 암호화하지만 일부 대안을 확실히 살펴 봅니다. 그것은 단지 일부입니다 :

HTTP 기본 인증은

가 는 또한 URI를 같은 정도의 로그 파일에

NB를 종료하지 않습니다

등 좋은 간단하고 잘 브라우저, 웹 서버에 의해 지원되지 일반 텍스트 HTTP 헤더이므로 SSL이 아닌 응용 프로그램에는 권장되지 않습니다.

http://en.wikipedia.org/wiki/Basic_access_authentication

관련 문제