2013-07-05 3 views
13

저는 REST Webservice에 초보자이며 방금 첫 번째 webservice를 만들었습니다.
내 서비스에서 사용자는 원하는 사용자 이름과 암호를 제공하는 간단한 양식을 통해 프로필을 만들 수 있습니다.기본 HTTP 인증을 REST webservice (Java + Jersey)와 함께 사용하는 방법?

이제 사용자가 로그인 할 때 사용자 자격 증명을 확인하는 방법 ??
나는 사용자가 로그인했는지 확인하는 간단한 폼이 있지만 추가/업데이트/삭제의 다양한 프로필 작업을 수행 할 때 사용자의 유효성을 검사하는 방법은 무엇입니까 ??

예 :
FB에서 로그인하면 자격 증명이있는 쿠키가 저장되고 "게시 상태"와 같은 작업을 수행 할 때 친구에게 메시지를 보내면 ... 묻지 않습니다 귀하의 자격 증명이 거기에 귀하의 자격 증명이 거기에 그 쿠키를 사용하는 쿠키를 가지고 있기 때문에 귀하의 자격 증명을 더 이상 ...

하지만 우리는 쿠키를 사용하지 않기 때문에 다음 옵션은 HTTP 헤더입니다. 와 나는 HTTP 헤더 .IE를 통해 사용자 자격 증명을 보내고받을하는 방법을 알고 싶어
Basic HTTP Auth

+0

더 많은 피드백이 필요합니까? 그렇지 않고 내 대답이 도움이 되었다면이 질문에 대한 내 게시물을 수락 할 수 있습니다. Greetz :) – benjiman

답변

29

클라이언트 측

당신이 HTTP Authorization 헤더를 사용하는 API에 대한 자격 증명을 보내려면, 자격 증명을 지정 Basic username:password의 형식입니다. username : password 문자열은 Base64 인코딩 스키마를 사용하여 인코딩되어야합니다. 그래서 예를 들어 헤더 같은 것을 볼 수 있었다 : 나머지 사양은 클라이언트 - 서버 통신에 상태가되어야한다는 주장으로

Authorization: Basic d2lraTpwZWRpYQ== 

을, 당신은 모든 요청에 ​​자격 증명을 사용하여 헤더를 포함해야합니다. 일반적으로 클라이언트 측에서 세션 쿠키를 사용하여 사용자를 식별하므로 모든 요청에 ​​대해 자격 증명을 입력 할 필요가 없습니다.

서버 측이 저지 REST 서비스 내부의 자격 증명을 확인하려면, 당신은 잡아 들어오는 모든 요청을 차단해야합니다. Jersey는 ContainerRequestFilters이라는 개념을 제공합니다. 이처럼의 web.xml에 서블릿 정의 내에서 이러한 유형의 필터를 추가 할 수 Tomcat을 사용하는 경우 예를 들어

<init-param> 
    <param-name>com.sun.jersey.spi.container.ContainerRequestFilters</param-name> 
    <param-value>your.package.BasicAuthFilter</param-value> 
</init-param> 

참조 된 클래스 BasicAuthFilter 요구 유니폼 ContainerRequestFilter 인터페이스를 구현하고 public ContainerRequest filter(ContainerRequest request) 메소드를 오버라이드 (override)합니다. 방법 내부 당신은 기본적으로 다음을 수행합니다 :

  • 그들을 디코딩 요청의 인증 헤더에서 Base64로 인코딩 된 자격 증명을 가져 오기 (즉, 사용 javax.xml.bind.DatatypeConverter.parseBase64Binary())
  • 이 UserDao (또는 다른 데이터 소스 제공)를 사용 자격 증명이 유효한지 확인하려면
  • 유효성 확인에 실패하면 401 Unauthorized 반환 상태 코드 (예 :자격 증명이 유효한지 throw new WebApplicationException(Status.UNAUTHORIZED))
  • 는 단순히

당신은 this 블로그 게시물에 아주 좋은 예를 찾을 수 처리에 대한 책임이 저지 자원에 위임하기 위해 요청을 반환합니다.

+2

제공된 링크의 예제는 JERSEY 1.x에서만 작동합니다. 2.X에서는 작동하지 않습니다. – lonelyloner

+1

링크 된 블로그 게시물에는 Jersey 2.x에 대한 예제 링크가 있습니다. https://simplapi.wordpress.com/2015/09/17/jersey-jax-rs-implements-a-http-basic-auth-decoder -for-2-x-branch / – CalumMcCall