2011-01-12 2 views
12

나는 REST 웹 서비스를 호스팅하고있어에서 봄 보안과 고정 된 REST 웹 서비스, 즉 : 나는 안드로이드 응용 프로그램에서 호출하고 있습니다봄 보안을 사용하여 Grails 애플리케이션에서 안드로이드

@Secured(['IS_AUTHENTICATED_REMEMBERED']) 
def save = { 
    println "Save Ride REST WebMethod called" 
} 

를 호출. (안전하지 않은 서비스를 호출하면 정상적으로 작동합니다.)

서비스를 호출하려면 수동으로 요청 (HttpUriRequest)을 작성하고 HttpClient으로 실행하고 있습니다.

나는 나는 ... 구체적으로해야 가장 좋은 방법이 무엇인지 궁금하고,이를 구현하는 방법 :

  1. 는로를 포함하는 헤더를 추가하는 JSESSION_ID를 검색하기 위해, 한 번 로그인을 수행합니다 후속 요청마다 HttpUriRequest?
  2. 또는 (안 심지어 이런 짓을 했을까 방법을 잘) 로그인 및 각 요청에 직접 비밀번호,

은 내가 옵션 1 작업을 얻을 수 있다고 생각 쿠키/서버 측 세션을 전술을 포함하지만 아니다 Spring Security가 (2)의 허가를 얻는 지 확실하다면, 그렇게 할 수 있다면 ... 고마워!

- 또한 라이브러리가 없기 때문에이 모든 작업을 수행 할 수 있습니까? :)

답변

10

스프링 보안 은 기본 인증과 양식 기반 인증 (URL에 사용자 이름/암호 포함)을 모두 지원합니다.

일반적으로 REST 서비스는 각 요청마다 인증되며 일반적으로 세션별로 인증되지 않습니다. 기본 스프링 보안 인증 (3.x를 사용 중이라고 가정)은 기본 인증 매개 변수 또는 양식 매개 변수 (j_username 및 j_password) (형태 : http://you.com/rest_service?j_username=xyz&j_password=abc)를 찾아야합니다.

수동으로 j_username/j_password를 URL에 붙여 넣거나 게시 매개 변수로 추가하거나 (기본 설정) 기본 인증 사용자 이름/비밀번호를 설정하면 모든 스프링 보안 인터셉터에 대해 REST 서비스를 인증해야합니다. 상자.

나는 봄 보안에 대한 기본 페이지 로그인에 대해 동일한 작업을 수행 했으므로이 문서를 정확히 읽지 만 REST 서비스에서는이 작업을 시도하지 않았다는 것을 인정할 것이다. 면책 조항 이상.

+4

답장을 보내 주셔서 감사합니다.이 아이디어는 많이 도움이되었지만 효과가 없었습니다. 즉시 사용 가능하게하려면 무엇이 필요한지 게시했습니다. http://storypodders.com/dasBlog/2011/01/22/SecuringRESTServicesInGrailsWithSpringSecurity.aspx – Bobby

+0

훌륭한 게시물이었습니다. 덕분에 기여해 주셔서 감사합니다. 다른 많은 사람들에게 유용 할 것입니다. –

+12

URL에 사용자 이름과 암호를 넣는 것은 대개 잘못된 생각으로 간주됩니다. 웹 서버 로그 파일에는 종종 자격 증명을 노출하는 쿼리 매개 변수가 포함되어 있습니다. 브라우저에서 RESTful 서비스에 액세스하는 모든 사용자는 자신의 기록에 공개 된 자격증 명을 갖게됩니다. – Patrick

9

oauth의 작동 방식과 유사한 login-once-and-get-a-token 방식을 사용할 수 있다고 생각합니다.

보안 채널 (https/ssl) 외부에서 네트워크를 통해 사용자 이름과 암호를 보내는 것은 끔찍한 생각입니다. 네트워크의 모든 사용자가 요청 패키지를 스니핑하고 일반 텍스트 비밀번호를 볼 수 있습니다.

반면에 토큰 메소드를 사용하면 토큰 문자열이 무작위로 생성되기 때문에 토큰이 손상 되더라도 최악의 경우 다른 사용자가 REST API에 액세스하는 토큰을 사용할 수 있습니다.

다른 솔루션은 SSL 터널 (HTTPS)을 통과합니다. 나는 실제로 비교와 결과를 보여 줬다 : 분당 80 회의 요청 (min)과 분당 300 회의 요청 (min) (http)

관련 문제