JSON 웹 토큰은 어떻게 작동합니까?
인증에서 사용자가 자격 증명을 사용하여 성공적으로 로그인하면 JSON 웹 토큰이 반환됩니다. 토큰은 자격 증명이므로 보안 문제를 방지하기 위해 세심한 주의를 기울여야 합니다. 일반적으로 필요 이상으로 토큰을 보관해서는 안 됩니다.
또한 보안 부족으로 인해 민감한 세션 데이터를 브라우저 저장소에 저장해서는 안 됩니다 .
사용자가 보호된 경로 또는 리소스에 액세스하려고 할 때마다 사용자 에이전트는 일반적으로 Bearer 스키마 를 사용하여 Authorization 헤더 에서 JWT를 보내야 합니다 . 헤더의 내용은 다음과 같아야 합니다.
Authorization: Bearer <token>
이는 경우에 따라 상태 비저장 권한 부여 메커니즘일 수 있습니다. 서버의 보호된 경로는 헤더에서 유효한 JWT를 확인 Authorization하고 JWT가 있는 경우 사용자는 보호된 리소스에 액세스할 수 있습니다. JWT에 필요한 데이터가 포함되어 있으면 항상 그런 것은 아니지만 특정 작업에 대해 데이터베이스를 쿼리해야 할 필요성이 줄어들 수 있습니다.
HTTP 헤더를 통해 JWT 토큰을 보내는 경우 토큰이 너무 커지지 않도록 해야 합니다. 일부 서버는 8KB 이상의 헤더를 허용하지 않습니다. 모든 사용자 권한을 포함하는 것과 같이 JWT 토큰에 너무 많은 정보를 포함하려는 경우 Auth0 Fine-Grained Authorization 과 같은 대체 솔루션이 필요할 수 있습니다 .
헤더에 토큰이 전송되면 AuthorizationCORS(Cross-Origin Resource Sharing)는 쿠키를 사용하지 않으므로 문제가 되지 않습니다.
다음 다이어그램은 API 또는 리소스에 액세스하기 위해 JWT를 얻고 사용하는 방법을 보여줍니다.
- 애플리케이션 또는 클라이언트가 권한 부여 서버에 대한 권한 부여를 요청합니다. 이것은 다른 인증 흐름 중 하나를 통해 수행됩니다. 예를 들어 일반적인 OpenID Connect 호환 웹 애플리케이션은 인증 코드 흐름을/oauth/authorize 사용하여 엔드포인트를 통과합니다 .
- 권한이 부여되면 권한 서버는 애플리케이션에 액세스 토큰을 반환합니다.
- 애플리케이션은 액세스 토큰을 사용하여 보호된 리소스(예: API)에 액세스합니다.
서명된 토큰을 사용하면 토큰에 포함된 모든 정보가 사용자 또는 다른 당사자가 변경할 수 없더라도 노출된다는 점에 유의하십시오. 즉, 토큰에 비밀 정보를 입력하면 안 됩니다.