2014-12-25 2 views
6

REST 스프링 부트에서 사용자의 권한 부여 및 인증에 가장 적합한 방법은 무엇입니까?스프링 부트 REST 토큰 권한 부여 및 인증 모범 사례

모바일 용 표준 페이지 + REST API를 사용하여 웹 앱을 구축하고 있습니다. Spring 보안에 대한 많은 기사를 살펴 보았고 기본적으로 대부분 REST 호출을 허용하거나 차단하는 일종의 fitler 접근법을 사용합니다. 필자의 경우에는 사용자가 누구인지에 기반한 인증 논리가 있습니다. 예를 들어 사용자 정보를 업데이트하는 /update API가 있으며 사용자는 자신을 업데이트 할 수 있지만 다른 사용자는 업데이트 할 수 없습니다.

  • 사용자가 인증 API를 호출하고
  • 시스템, 짧은 수명 토큰을 생성은 데이터베이스의에서 저장 이름/암호 또는 쿠키를 전달합니다 처음에 나는 다음 인증 스키마를 사용할 생각했다.
  • 사용자가이 토큰을 가져 와서 그의 쿠키를 업데이트합니다 (웹 응용 프로그램의 JS가이를 읽고 읽을 수 있음)
  • REST 호출이 만들어지면 쿠키가 전달됩니다. 컨트롤러에서 토큰을 추출하고 만료 여부를 확인하고 데이터베이스에 쿼리를 수행하여 토큰의 유효성을 검사하고 사용자 ID를 얻습니다.
  • 사용자 ID를 기반으로 REST가 허용되거나 차단됩니다.

구현하기에 올바른 방법입니까? 나는 스프링 부트 보안에 관한 기사를 읽은 후에 머리에 꽤 큰 혼란을 가지고있다. 적어도 세션 승인은 작동하지 않습니다 (REST는 상태 비 저장). 로그인/비밀번호를 저장하지 않고 모바일 장치에 대한 인증을 만들고 싶습니다.

이 토큰을 REST 본문 자체에 전달하는 것이 합리적입니까? GET 방법의 경우에는 무엇입니까?

지식을 공유해 주셔서 감사합니다.

+0

단지 흥미로운 점이 있지만, 장점은 토큰 상태가 데이터베이스에 저장된 인증 상태 세션 (당신이 끈기를 다룰 필요가 없으므로 작업하기가 훨씬 쉽습니다)? –

+0

나머지는 상태 비 저장입니다. 세션이 없습니다. 두 번째 : 두 경우 모두 (세션이 있더라도) 세션 값을 어딘가에 저장해야합니다. 일부는 redis를 사용합니다. – Tigran

+0

보안 상태가 필요합니다. 그리고 TCP는 상태를 유지합니다. 그래서 당신이 그 중 하나를 사용하고자한다면 당신은 무국적자가 될 수 없습니다. 그것은 stackoverflow에 대한 의견을 가지고 무의미한 토론이지만, 나는 당신이 우선 순위를 재평가 (또는 "무국적자"를 재정의해야한다고 생각). –

답변

3

문제의 해결책을 찾으셨습니까?

다른 개발자/클라이언트에게 API를 공개하고 싶지 않다면 다른 곳에서이 문제에 대한 답을 얻었습니다 (OAuth를 살펴보면 간단한 토큰 기반 솔루션입니다) 작동합니다.

  • 설정 표준 HTML 로그인 페이지, 당신은와 사점 로그인에 쿠키를 반환하는 응용 프로그램에 사용자 로그인에 대한
  • 설정 봄 보안을 사용할 수 있습니다 : 기본적으로이의 라인을 따라

    뭔가 인증 토큰

  • 모바일 앱에 WebView (또는 이와 동등한 것)를 포함하고이 로그인 양식을로드하십시오. 사용자가 웹뷰를 통해 로그인 할 수 있도록하고 응답시 쿠키를 가져 와서 토큰을 저장하십시오. 모바일은 일반적으로 단일 사용자이므로 모바일 사용자가 로그인을 유지해야하는 것을 막기 위해 길게 유지할 수 있습니다.)
  • REST API에 토큰 (예 : 헤더의 토큰을 전달하는 모바일 앱에서)을 인증하기 위해 REST API에 보안 필터를 추가하면 현재 사용자에게 일반적인 스프링 인증 컨텍스트를 사용할 수 있습니다.

이 접근법은 Google에서 다음과 같이 제안합니다. (편집 : Google이 원래 읽은 페이지를 Google+ 로그인 및 OAuth2 사용에 대한 것으로 변경 한 것 같습니다.

Overview of the approach using Spring security

The code & details

이 있었지만 : 0 - 나는 여기 내 구현을 작성했습니다

그들의 일반적인 모바일/API 문서 so here it is in the web archive :))에 대한 링크를 볼 수 없습니다 정말로 단지 실험/개념 증명, 그것은 당신의 사고에 유용 할 것입니다.

+2

REST는 쿠키를 사용해서는 안됩니다. 그것은 무국적자입니다. 대신 토큰 권한 부여로 이동하십시오. –

0

쿠키 방식은 사용 사례에 적합합니다. 토큰은 사용자 ID로 연결될 수 있습니다. 필터는 쿠키를 추출하고 사용자 ID를 헤더로 전달할 수 있습니다. 예를 들어 apis에 대한 헤더로 전달하면됩니다. ...