2016-11-03 2 views
1

Dropwizard를 사용하여 webapp의 RESTful 백엔드를 개발했습니다. 모든 잘 괜찮 및기본 인증이 올바른 선택입니까?

@POST 
public void createEvent(@Auth User user, @FormParam("startTime") @NotNull @Min(0) Long startTime, 
         @FormParam("endTime") @NotNull @Min(0) Long endTime) { 
    validateEvent(startTime, endTime); 
    eventDAO.insertEvent(new Event(Util.convertMillisToDate(startTime), Util.convertMillisToDate(endTime), user.getName())); 
} 

는 사용자가 로그인되어 있는지 확인하기 위해,하지만이 사용된다.. 이제, 프론트 엔드 개발, 나는 내가 예를 들어, @Auth 주석을 사용하고있는 사용자를 로그인해야 http 기본 인증. 그 결과, 작업을 수행 할 때마다 서버에 사용자 이름과 암호를 보내야합니다. 그러면 클라이언트에게 암호를 어떻게 저장해야합니까? 내가 클라이언트에 암호를 해시해야합니까 (예 : 소금과 함께)? 쿠키는 컴퓨터에 액세스 할 수있는 사람들에게는 평문이 아닙니다. 나는 언제나 사용자 액세스 토큰을 사용해야합니까?

답변

2

일종의 세션 토큰을 사용하는 것이 거의 언제나 최선의 선택입니다. 사용자 이름과 암호를 한 번만 보내면 다른 모든 요청에서 사용자를 식별하는 데 사용하는 세션 토큰을 다시 얻을 수 있습니다. 당신은 클라이언트에만 세션 토큰을 암호를 저장하지 않아도됩니다

  1. :

    여기 장점이있다.

  2. 세션이 손상된 경우 (예 : 가짜 클라이언트) 토큰을 무효화 할 수 있으므로 비밀번호를 변경할 필요가 없습니다.
  3. 특정 토큰에 대한 사용 권한을 제한 할 수 있습니다.
  4. 사용자가이 앱에 비밀번호를 제공하지 않고 타사 앱에 대한 토큰을 생성하도록 할 수 있습니다.

포인트 1-2는 세션을 더 일반적으로 안전하게 만들기 때문에 모든 시스템에서 유용합니다. 포인트 2 ~ 4는 공용 API를 설계 할 때 특히 유용합니다. OAuth 2.0과 같은 프로토콜을 사용하여 타사 응용 프로그램에 사용자 이름이나 암호를 제공하지 않고도 응용 프로그램의 전체 또는 일부에 대한 안전하고 취소 가능한 액세스를 제공 할 수 있기 때문입니다. 제 3 자.

+0

그래서 평생 동안 username-> user_token 관계를 저장합니까? – Amnestic

+1

@Amnestic 네, 그게 기본적입니다. – Frxstrem

+1

@Amnestic 또한 토큰이 길고 무작위로 (가능한 경우, 임의로 암호화 된 임의성으로) 생성되어 사람들이 사용자에게 액세스 할 수 있다고 추측 할 수 없도록하고 싶습니다. – Frxstrem

0

이 경우 AUTH 2 인증 시스템을 사용하는 것이 좋습니다.

  1. 여기 중요한 것은 해싱이 암호화되지 않고 추가 된 것입니다. 저장된 쿠키에도 액세스 할 수 있습니다.
  2. 토큰을 사용하면 사용자가 타사 응용 프로그램으로 자신의 계정을 사용하여 로그인하고 고통을 덜 수 있습니다.
0

다른 사람들이 말했듯이, 토큰은 제어 할 수 있고 필요한 경우 취소 할 수 있기 때문에 훌륭합니다. 토큰 클라이언트 측만 저장하면됩니다. 서버 Db에 비밀번호를 저장하는 경우, Db가 유출 된 경우에도 비밀번호가 저장되어야합니다.

JWT와 다른 불투명 한 토큰 및 메커니즘의 차이점을 이해하십시오. JWTS는 토큰에 직접 정보를 저장하고 서명 (암호화되지는 않았지만)하므로 user_id 또는 유사하지 않은 개인 식별 정보를 저장하지 않습니다.

나는 https://www.moesif.com/blog/technical/restful-apis/Authorization-on-RESTful-APIs/

는 또한, https://jwt.io/introduction을 살펴 등, 로컬 저장소 대 쿠키를 사용하여, 다양한 토큰 유형에 대한 보안 관련 블로그 포스트를 작성했습니다. JWT가 어떻게 작동하는지에 대한 개요를 제공합니다. (나는 Auth0 BTW와 아무런 제휴 관계가 없지만 우리는 Moesif를 위해 그것을 사용합니다.)