2017-03-07 10 views
0

사람들은 일반적으로 JWT에 사용 권한을 저장합니까? admin: true 또는 scopes: ['add_foo', 'delete_foo', 'read_foo'] 일 수있는 예를 보았습니다. 그리고 이것은 괜찮아 보이는데 다른 것들은 JWT가 많은 허가/범위가있는 경우 잠재적으로 큰 크기가 될 수 있다는 것입니다. JWT가 검증 될 수있는 한 사용자 권한을 얻기 위해 DB 또는 캐시를 칠 필요가 없으므로 실제로 유용 할 것 같습니다.권한에 대한 JWT 무효화

내 주요 질문은 어떻게 이러한 권한이 변경되는 경우 무효화됩니다 것입니다.

예를 들어, sys admin Joe는 사용자 Bob으로부터 'add_foo'및 'delete_foo'권한을 취소하지만 'read_foo'권한을 유지합니다. 이 시나리오에서 사용자 Bob은 자신의 토큰이 완전히 무효화되어 다시 로그인 할 필요가 없습니다. 기본적으로 새 권한으로 새 JWT를 가져와 정상적으로 수행해야합니다.

암호 변경시 새 JWT를 발행하는 방법을 설명하는 예제를 보았습니다. 그러나 sysadmin Joe가 사용자 Bob에게 업데이트를 수행한다는 차이점이 있습니다. 따라서 사용자 Bob이 새 토큰을 즉시 가져올 수있는이 워크 플로에는 기회가 없습니다.

대부분의 예제는 취소 된 토큰의 검은 목록을 유지하거나 DB 레코드 ID를 변경하여 토큰이 더 이상 유효하지 않게하거나 사용자 별 암호를 가지고 변경하는 무효화를 제안합니다.

나는 이들 모두가 토큰을 취소하고 유효하지 않은지 테스트하기 위해 작동하지만 사용자가 새 토큰을 얻는 방법을 알 수 있습니까? 현재 JWT가 유효하지 않습니까? 그것으로 무엇인가하려고하면 실패합니다.

"새로 고침 토큰"에 대한 언급을 보았습니다. 이것들이 널리 사용됩니까? 그들은 웹상에서 안전하고 새로 고침 토큰을 얻기가 더 어려운 모바일 앱에 주로 사용됩니다. 브라우저 dev 도구 등을 통해 새로 고침 토큰을 훔치는 것이 비교적 쉽고 승인되지 않은 액세스가 감지되고 새로 고침 토큰이 취소 될 때까지 누군가 그 계정에 영원히 액세스 할 수있는 것처럼 보입니다.

어쩌면이 시나리오에서 사용자 Bob에게 재 인증을 강요하는 것이 그리 큰 문제는 아니겠습니까? 권한이 너무 자주 변경되지는 않습니다.

감사합니다. 마이크.

답변

0

만료일을 설정할 수 있습니다 (웹 앱의 경우 일반적으로 15 분에서 30 분, 모바일에서는 1 주). 설정시 클레임 매개 변수 ("iat")로 발행됩니다. 그런 다음 토큰의 유효성을 확인할 때마다 토큰의 "나이"를 확인해야합니다. 5 분 이상 지난 경우 DB에서 데이터를로드하고 현재 "iat"값으로 새 토큰을 만듭니다.

0

권한이 변경되면이 사용자에 대해 발급 된 토큰을 무효화해야합니다. 사용하는 방법은 다양합니다. Invalidating client side JWT session

그러나 JWT의 주요 이점 중 하나를 잃어 버리기 때문에 토큰 취소는 권장되지 않습니다. 서버 저장 장치가 필요하지 않습니다.

Oauth2.0 항에 고침 토큰의 목적,

는 애플리케이션

고침 토큰 액세스 토큰을 획득하기 위해 사용되는 인증 정보이다 재 인증없이 새로운 액세스 토큰을 획득 할 수있다.권한이 자주 변경되지 않는이 재 쉽게 할 수있는 경우 새로 고침 토큰은

, 인증 서버가 클라이언트에 발급되고, 현재의 액세스 토큰이 무효가되거나 만료되는 경우 새로운 액세스 토큰을 얻기 위해 사용된다 사용자를 인증하고, 토큰에 실제로 포함되어야하는지 여부를 많이 변경하면