JWT의 페이로드에 액세스 권한 및 역할이 포함되어야합니까?


9

클라이언트의 권한 및 역할에 대한 정보가 JWT에 포함되어야합니까?

유효한 토큰이 올 때마다 JWT 토큰에 이러한 정보를 갖는 것이 매우 유용합니다. 사용자에 대한 권한에 대한 정보를 추출하는 것이 더 쉬울 것이며 데이터베이스를 호출 할 필요가 없습니다. 그러나 이러한 정보를 포함하고 데이터베이스에서 동일한 정보를 다시 확인하지 않는 것이 보안 문제입니까?

또는,

위에서 언급 한 것과 같은 정보는 JWT의 일부가되어서는 안되며 사용자의 액세스 역할 및 권한을 확인하기 위해 데이터베이스 만 사용해야합니까?

답변:


7

토큰에 클레임을 포함시키는 목적은 리소스와 인증 공급자간에 해당 통신을 할 필요가 없습니다.

리소스는 토큰에 유효한 서명이 있는지 확인하고 내용을 신뢰할 수 있습니다.

개인 키가 인증 서버의 개인 키라고 가정하면 좋습니다. 일부 공급자는 위험을 완화하기 위해 키를 변경합니다.

당신이 그것에 대해 생각하면, 자원이 클레임을 얻기 위해 인증 서버에 다시 전화를 걸면. 그런 다음 본질적으로 유사한 트러스트 방법으로 올바른 서버와 통신하도록합니다.


아름다운 답변을 보내 주셔서 감사합니다. "일부 서비스 제공 업체는 위험을 완화하기 위해 키를 변경합니다." ?
Anshul Sahni

1
따라서 인증 공급자는 서명 키를 고정하지 않고 키를 자주 변경하고 리소스 서버가 공개 절반을 다운로드 할 수 있도록 엔드 포인트를 제공합니다. 리소스는 요청마다 한 번씩이 아니라 인증 서버를 자주 호출해야합니다.
Ewan

따라서 서비스에 의해 키 서명이 변경 될 때마다 모든 토큰이 유효하지 않습니다
Anshul Sahni

1
일반적으로 비행 토큰은 무효화되지 않도록 가능한 키가 두 개 이상 있습니다. 토큰은 '키 ID'를 포함하여 리소스에 사용할 토큰을 알려줍니다.
Ewan

내가 여기서 놓친 유일한 것은 JWT의 데이터가 무효화 될 때 진행하는 방법입니다. 서버 측에서 역할이 변경되었지만 클라이언트가 여전히 모든 역할 세트를 가진 토큰을 보유한다고 가정하십시오. 오래된 정보를 보유한 토큰이 더 이상 유효하지 않아 추가 요청에 사용할 수 없도록 서버 측에서 토큰을 취소 할 수 있어야합니다. 이것은 어떤 이유로 든 Ewans가 어떻게 든 서버가 토큰을 취소하도록 허용하는 것과 일치합니다.
Laiv

1

내 경험에 따르면 모든 시스템이 일부 중앙 역할 및 권한 데이터베이스를 사용하는 경우 모든 것을 JWT에 추가 할 수 있습니다.

그러나 인증 서버 자체가 토큰을 수신하고 신뢰하는 대상 시스템에 대해 전혀 모르는 경우 SSO 시나리오에서는이 방법이 제대로 작동하지 않을 수 있습니다.

사용자의 역할과 권한은 전적으로 JWT 토큰의 수신자에게 있습니다. SSO 인증을 JWT와 함께 사용 권한 서브 시스템이 이미있는 일부 레거시 시스템에 통합하여 JWT에있는 하나의 청구 (사용자 ID 청구) 만 필요한 경우에 특히 그렇습니다.


동의합니다. idp가이 사용자 jwt가 어떤 다른 서비스와 통신 할 것인지 알지 못하기 때문에 사용자 권한은 특히 SSO에서 jwt의 일부가되어서는 안됩니다.
Manish Rawat

또한 JWT의 권한 주장은 단순한 모 놀리 식 API를 넘어서는 좋은 아이디어가 아니라는 데 동의합니다. 나는 그것에 대해 블로그 게시물을 썼습니다 : sdoxsee.github.io/blog/2020/01/06/…
sdoxsee
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.