2008-11-07 6 views
6

.NET 웹 서비스 API가 있습니다. 현재 SOAP 헤더의 사용자 정의 인증 요소를 통한 인증이 필요하기 때문에 사람들은 SOAP 정의를 사용하여 API를 사용합니다. 완벽하게 작동합니다. 벌금.웹 서비스에 대한 인증을 얻는 가장 좋은 방법은 무엇입니까?

SOAP은 요청을 POST로 요구합니다. 우리는 사용자가 GET 동사를 사용할 수있게하고 싶습니다 (그래서 캐시 가능할 수 있습니다).

인증을 제공하는 간단한 GET API (웹 서비스 일 필요는 없습니다)를 제공하는 가장 좋은 방법은 무엇입니까?

예를 들어, API 경로 :

http://www.blah.com/api/Search?query=Foo

이 허용 및 일반적인 관행인가?

http://www.blah.com/api/Search?query=Foo&Key=<some guid>

참고 : 나는 또한, SSL을 구현하거나 IIS에서 별도의 소프트웨어 나 플러그인을 설치하지 않는 등 등

답변

1

웹 서비스를 확보 할 필요가있는 경우, 당신이 현재 인증 헤더를 가지고 있기 때문에 나는 그것을 가정한다고 가정하고, 적어도 인증 부분에 대해서는 SSL을 사용하지 않고 GET을 사용하여 다시 고려해야합니다. 적어도 SSL을 통해 웹 서비스/응용 프로그램에 대한 승인 요청을 게시합니다. 모든 요청에 ​​대해 인증을 제공하지 않으려면 소비자가 후속 요청에 사용할 수있는 인증 쿠키를 수락하고 서비스에 생성해야합니다.

GET을 지원하려는 이유에 대해 URL에서 인증을 사용하지 마십시오. URL을 캐싱 할 수 있으면 자격 증명도 캐싱됩니다. 이는 누구든지 캐시 된 자격 증명을 다시 사용할 수 있기 때문에 웹 서비스의 보안을 파괴합니다.

+0

*) 캐싱은 클라이언트 측에서만 발생하므로 자격 증명이 동일해야합니다. ??? *) 승인 쿠키에 대해 더 자세히 이야기 할 수 있습니까? –

0

GET 전용 API를 사용하면 유일한 세션 ID를 가져 오는 첫 번째 방법이 있습니다.

예 : GET/API 행동 = 인증 & 사용자 이름 = 사용자 & 암호 = hashedpassword 당신이 당신의 측면에 저장 16 문자 토큰을 반환겠습니까 당신이 모든 후속 호출이 고유 한 토큰을 필요로한다.

API가 PHP로 작성된 경우 PHP의 세션 처리 기능을 사용하여이를 수행 할 수 있습니다 (시간 초과/가비지 수집이 있음). ASP.NET에는 비슷한 기능이 있습니다.

재연 공격 (세션 ID를 파악하거나 추측하는 사람)에 취약하지만 원하는 것이 있다면 간단합니다. HTTPS가 아닌 웹 사이트도 동일한 방식으로 취약합니다. 추가 보안을 위해 세션 ID를 사용자의 IP 주소와 연결할 수 있습니다.

0

WCF를 사용하는 경우 기본 제공 보안 메커니즘을 기반으로 구축 할 수 있습니다. 보안을 위해 표준 프레임 워크를 사용하고 싶지 않은 경우 보안을 가장 잘하지 못합니다.

+0

간단한 웹 서비스의 프로토 타입에서 WCF를 사용해 보았습니다. 나는 코드 지향적 인 종류의 개발자이고, 모든 XML 설정은 나를 없애 준다. 게다가 커스텀 인증을 추가하는 방법을 찾지 못했습니다. –

1

클라이언트가 동일한 도메인에있는 경우 IIS 응용 프로그램에서 Windows 통합 인증을 사용할 수 있습니다. 이제 응용 프로그램은 Windows 인증 사용자 만 수락합니다. 보다 정교하고 역할 기반 세분화를 위해 자체 RoleProvider를 추가하십시오.

0

Thomas Eyde의 대답과 비슷합니다. siteminder와 같은 단일 사인온 시스템을 사용하여 URL을 보호 할 수 있습니다. 호출자는 일반적으로 쿠키에 저장되지만 쿼리 문자열에 추가 될 수있는 토큰을 포함하도록 요구합니다.

SSL을 사용하지 않는 경우 모든 SSO 또는 웹 서비스 관리 플랫폼이 의도적으로 인증을 어렵게 만듭니다.

관련 문제