728x90
토큰이라 하면 오락실이나 놀이공원서 사용하는 동전을 떠올릴 수 있다
물론 요즘은 사용하지 않지만... ㅎㅎ
토큰은 '대가를 지불하였고, 이 시설(서비스)을 이용할 수 있다'는 의미를 담은 증표이다
애플리케이션 보안 측면에서의 토큰은 어떤 의미일까?
✔️ 토큰이란?
인증된 사용자의 자격을 증명하는 동시에 접근 권한을 부여해 접근 권한이 부여된 특정 리소스에만 접근이 가능하게 하는 역할
✔️ 토큰 기반 자격 증명의 특징
인증된 사용자의 정보를 토큰에 저장하고, 접근 권한을 부여해 접근 권한이 부여된 특정 리소스에만 접근이 가능하게 하는 방식
- 토큰에 포함된 인증된 사용자 정보는 서버 측에서 별도의 관리를 하지 않는다
- 생성된 토큰을 헤더에 포함시켜 request 전송 시, 인증된 사용자 인지를 증명하는 수단으로 사용된다
- 토큰 내에 인증된 사용자 정보 등을 포함하고 있으므로 세션에 비해 상대적으로 많은 네트워크 트래픽을 사용한다
- 기본적으로 서버 측에서 토큰을 관리하지 않으므로 보안성 측면에서 조금 더 불리하다(세션에 비해)
- 인증된 사용자 request의 상태를 유지할 필요가 없기 때문에 서버의 확장성 면에서 유리하고, 세션 불일치 같은 문제가 발생하지 않는다
- 토큰에 포함되는 사용자 정보는 토큰의 특성상 암호화가 되지 않기 때문에 공격자에게 토큰이 탈취될 경우, 사용자 정보를 그대로 제공하는 셈이 되므로 민감한 정보는 토큰에 포함시키면 안 된다
- 기본적으로 토큰이 만료되기 전까지는 토큰을 무효화시킬 수 없다
- CSR 방식의 애플리케이션에 적합한 방식이다
세션의 경우 서버 확장 시, 세션 불일치 문제가 발생할 수 있지만 Sticky Session, Session Clustering, Session 저장소의 외부 분리 등의 작업을 통해 보완을 하고 있습니다.
토큰의 경우, 기본적으로 토큰 무효화를 할 수 없지만 key/value 쌍의 형태로 저장되는 Redis 같은 인메모리 DB에 무효화시키고자 하는 토큰의 만료 시간을 짧게 주어 해당 토큰을 사용하지 못하게 하는 등의 방법으로 보완하고 있습니다.
https://e-room.tistory.com/138
728x90
'개발일지 > 웹개발' 카테고리의 다른 글
Spring-boot Github Actions 환경변수 설정해주기 (0) | 2023.01.12 |
---|---|
Spring-boot Github Actions를 이용한 자동배포 (0) | 2023.01.06 |
세션(session)이란? (0) | 2022.11.23 |
Cookie의 옵션들 (0) | 2022.11.22 |
Hashing, Salt (0) | 2022.11.22 |