2016-06-22 2 views
0

나는 Angular + Spring 응용 프로그램을 가지고 있으며 JWT 토큰을 사용하여 서비스를 인증하려고합니다.브라우저에서 직접적인 URL 히트를위한 Jwt 토큰 인증

Jwt 인증에서는 토큰을 localStorage에 저장하고 모든 요청의 승인 HTTP 헤더에 토큰을 첨부합니다. 이는 AngularJs에 인터셉터를 작성하여 수행 할 수 있습니다. 나는 this 튜토리얼을 따라 갔다.

이제 내 질문 :
브라우저에서 URL을 눌러 직접 요청한 내용을 어떻게 인증 할 수 있습니까?

해당 시점에 URL을 누르면 페이지가로드되지 않고 localStorage에서 인증 헤더로 URL을 바인딩 할 스크립트가 없습니다. 궁극적으로 서버는 사용자가 이전에 인증 되었더라도 요청을 거부하고 401을 보냅니다. 비디오, 이미지 또는 브라우저에서 직접로드 할 필요가 문서와 같은 웹 자원의

+0

때 머리에 존재하지 않았던 경우 URL이 JWT를 찾고 URL에 직접 연결하면 쿠키 만 클라이언트가 인증되었음을 알리는 완전히 자동화 된 방법을 제공합니다. 귀하의 서버가 JWT를 localStorage 밖으로 가져 와서 요청을하는 시도 된 URL이 삽입 된 커스텀 401/Unauthorized 응답을 제공 할 수 있습니까? 가장 효율적인 접근 방법은 아닙니다. – amoebob

+0

브라우저에서 히트 한 요청에 헤더를 추가 할 수 없다고 생각합니다. – pratik

+0

시도한 URL을 401 응답에 삽입하고 jwt를 가져 오지만 그 후에는 새 페이지 요청 (아약스 요청 아님)에 헤더를 추가하는 방법은? 나는 그것이 [이] 불가능하다고 생각 (http://stackoverflow.com/questions/24130004/adding-http-headers-to-window-location-href-in-angular-app?answertab=active#tab-top) 대화. – pratik

답변

1

, (당신이 헤더를 설정할 수 없습니다) 서버 측에서

path/to/resource?jwt=... 

JWT와 URL에 매개 변수를 추가, 디코드 인증 헤더의 경우

검색 엔진에서, 예를 들어 당신이 발생하지 않은 들어오는 링크를 들어

,

1) accept the link and redirect user to login page with a cookie/field set to the destination page 
    2) automatically, login user with JWT from local storage set in header in the usual way 
    3) if it is succesful, redirect to the destination 
+0

귀하의 접근 방식에 따라 서버 측에 두 가지 조건을 작성해야한다고 생각합니다. 1) 헤더에있는 jwt를 확인하십시오 -> 존재하고 유효한 -> 사용자가 인증 된 경우 2) 헤더에없는 경우 -> URL을 확인하십시오 jwt의 매개 변수 -> 존재하고 유효한 -> 사용자가 인증 된 경우 .. 맞습니까? – pratik

+0

예, 당신 말이 맞습니다. – pedrofb