2017-12-29 30 views
0

저는 REST 보안에 익숙하며 RESTful 웹 서비스를 백엔드로 통합하는 AngularJS (Angular 1) 앱을 개발하려고합니다. 이 웹 서비스는 앱 (프론트 엔드)이 모든 데이터를 가져와 쓰는 방법입니다.JWT 또는 OAuthv2로 REST + AngularJS 보안하기

처음에는 앱이 REST 서비스의 유일한 클라이언트이지만 결국 Angular 앱에서 사용/사용되지 않고 공개 된 공개 API로 서비스를 열고 싶습니다.

내가 REST 서비스에 대한 인증/권한 부여 솔루션을 작성하는 방법을 알아 내려고하고 있으며 명확하지 않은 몇 가지 사항이 있습니다. 각도 응용 프로그램과 백업 REST 서비스 모두 자신의 인증/권한 부여 모델을 갖기를 바란다. (나는 이것을 밖으로 이야기 할 수 있다고 생각한다.)

  • Angular 앱에는 REST 서비스와 통합하기위한 자체 "서비스 사용자"와 자격증 명이 함께 제공됩니까? 자체 비밀번호가있는 myapp-client의 사용자 이름과 같은 것? 또는
  • 각도 앱을 REST 서비스에 "전달"하는 사용자 자격 증명이 있습니까? 첫 번째 경우에

, 나는 각 응용 프로그램과 함께 통합하고 (예를 들어 다시 : 사용자 이름 : myapp와 클라이언트, 비밀번호 : 12345)를 REST 서비스에 연결하는 그것으로 하드 코딩 자격 증명을 제공 할 수 말했듯이. 나는 이것이 가장 단순하다고 생각하지만, 브라우저/프론트 엔드 코드에서 이러한 하드 코드 된 자격 증명을 노출 한 다음 태양 아래의 스크립트 키드는 내 전체 REST API에 액세스하기위한 username + password를가집니다.

  1. 익명이며
  2. 가 자신의 자격 증명을 입력 로그인 화면 (사용자 이름에 전달됩니다 : 후자의 경우

    , 나는 각도 앱이 사용자가 어디에 중개인의 어떤 역할을 할 것 같아요 : smeeb, 비밀번호 : 23456)
  3. 를 인증은 (어떻게 든 앱뿐만 아니라 백엔드)
  4. 와 두은/JWT/등 베어러의 어떤 종류를 가져옵니다. 토큰을 누른 다음 앵귤러 앱에 대한 모든 후속 HTTP 요청은이 유효한 토큰을 사용합니다 (하지만 앱은 토큰이 저장되는 브라우저와 REST 서비스 사이의 중개자 역할을합니다)

브라우저에서 자격 증명을 노출하는 이전 솔루션 (앱이 백엔드와 통합하는 데 사용하는 1 명의 서비스 사용자)에 대한 의구심과 후자의 해결책이 갈 길이 멀다는 확신을 찾고 있습니다. 또한 JWT가 후자의 솔루션을 구현할 수있는 방법인지 또는 OAuthv2 또는 다른 것과 함께 갈 필요가 있는지 여부에 대한 확인을 찾고 있습니다.

답변

1

REST API를 통해 각도 앱을 인증해야하는 경우 단계는 다음과 같습니다.

  1. 사용자는
  2. 각도 앱이 자격 증명이 올바른 경우, REST API는 각 응용 프로그램에 JWT를 반환 REST API에
  3. 를 그 데이터를 전송하는 각도 응용 프로그램에 대한 사용자 이름/암호를 입력합니다.
  4. 인증을 필요로하는 REST API에 대한 이후의 요청마다 Angular app가 요청과 함께 JWT를 전달합니다.
+0

감사합니다 @Ishan (+1) - 사용자가 앱에서 로그 아웃 할 때 각도 앱이 REST API에서 '로그 아웃 엔드 포인트'에 도달했거나 서버에서 JWT 만료로 충분할 경우 -측면? – smeeb

+0

그 질문은 이미 https://stackoverflow.com/a/23089839/1281089에서 답변되었습니다. 에 따르면 클라이언트에서 토큰을 제거하거나 토큰 블랙리스트를 만들거나 토큰 만료 시간을 짧게 유지하고 자주 회전시킬 수 있습니다 –