[Problem]
토큰에서 사용되는 Bearer는 무엇이고 왜 사용하고 있는가?
[Solution]
- Bearer?
- 인증 방식 중 하나로, HTTP 요청에 대한 인증 헤더에 사용되는 토큰 타입.
- 주로 웹 애플리케이션에서 API를 보호하고 인증하는 데 사용.
- 클라이언트는 인증을 위해 서버로부터 발급받은 액세스 토큰을 얻어서, 이를 Bearer 토큰으로 설정하고 HTTP 요처의 Authorization 헤더에 포함시킨다.
- 쿠키나 세션을 이용한 인증보더 더 보안성이 강하고 효율적인 인증 방법이다.
==> 쿠키 인증: 아이디나 암호와 같은 사용자 정보를 쿠이에 담아 서버로 보낸다. HTTP 방식의 통신을 사용할 경우 제 3자가 해당 정보를 염탐할 수 있다.
==> 세션 인증: 세션ID를 보내므로 쿠키에 비해 보안성이 높다고 볼 수 있지만 서버에 추가적인 데이터베이스 공간이 필요하다는 단점이 있다 - 토큰의 구조: 헤더(암호화 방식 타입 등을 나타낸다.) + 페이로드(전송할 데이터가 담김) + 서명(토큰 검증을 위한 서명을 각각 인코딩(해싱)한 값)
- 장점
- 단순성: Bearer 토큰은 일반적으로 문자열 형태로 표현되며, 쉽게 전달하고 저장할 수 있다.
- 편의성: 클라이언트는 요청을 보낼 때마다 Bearer토큰을 헤더에 포함시킨다. 이렇게 함으로써 별도의 인증 상태를 유지할 필요 없이, 서버는 헤더에서 토큰을 읽어 인증을 처리할 수 있다.
- 확장성: Bearer 토큰은 다양한 클라이언트 및 서버 간에 사용될 수 있으며, 특정 플랫폼에 족속되지 않는다.
- 범용성: Bearer 토큰은 다양한 인증 방식과 조합하여 사용될 수 있다. 예를 들어, OAuth 2.0 프로토콜에서 Bearer 토큰은 액세스 토큰으로 사용되며, 다른 인증 방식과 함께 사용될 수 있다.
- 단점
- 보안 위험성: Bearer 토큰은 함호화되지 않은 텍스트 형태로 전송된다. 토큰이 탈취되거나 유출되면 제3자가 해당 토큰을 사용하여 인증을 통과할 수 있다. 따라서 토큰의 안전한 저장과 전송이 매우 중요하다.
- 토큰의 만료 관리: Bearer토큰은 일반적으로 말료 시간을 갖고 있다. 만료된 토큰을 사용하려고 하면 인증이 실패하게 된다. 토큰을 갱신하거나 새로 발급해야 하는 작업이 필요하며, 이를 관리하기 위한 추가적인 로직이 필요하다.
- 토큰의 접근 범위 제한: Bearer 토큰은 한 번 발급되면 해당 토큰을 가지고 있는 클라이언트는 그 토큰으로 자원에 접근할 수 있다. 이는 토큰의 접근 범위를 제한하기 어렵게 만든다. 예를 들어, 한 번 발급된 토큰을 다른 애플리케이션 또는 다른 클라이언트가 악용할 수 있는 가능성이 있다.
- 토큰의 철회가 어렵다: Bearer 토큰을 철회하거나 무효화하는 것은 어렵다. 일단 토큰이 발급되고 클라이언트에 전달되면, 토큰을 어떻게 사용하든 서버는 이를 신뢰하고 인증한다. 따라서 토큰을 재사용하거나 철회해야 하는 경우, 추가적인 메커니즘이 필요할 수 있다.
- 클라이언트 측 저장소 의존성: Bearer 토큰은 클라이언트 측에서 안전하게 저장되어야 한다. 클라이언트 측 저장소에 대한 적절한 보안 조치가 필요하다. 이에 대한 관리 및 보호가 필요하다.
[Conclusion]
현재 JWT를 통해 토큰 기반 인증 시스템을 구축할 때 가장 많이 사용하고 있는 type이 Bearer 타입이다. 별 의미가 없는 키워드다. 그러나 서비스가 더 커질수록, 그리고 약속된 틀에서 벗어나지 않기 위해서는 키워드의 의미와 사용 방법에 대해 잘 알아야 한다. Bearer라는 키워드는 다른 키워드로 대체할 수 있지만 주어진 틀에서 벗어나 개발자들에서 암묵적으로 지켜오던 룰을 깨는 행동이다. 이럴 경우 추가적인 구현 및 협의 과정을 통해 잘 소통한다면 괜찮을 것이다.
'Self Dev. > TIL' 카테고리의 다른 글
2023.07.25 TIL - HTTPS를 이용한 쿠키 설정 (0) | 2023.07.26 |
---|---|
2023-07-24 TIL - S3 이용한 이미지 저장 (0) | 2023.07.24 |
2023.05.21 TIL - JWT를 header로 받는 이유.... (1) | 2023.05.21 |
2023.05.16 TIL - express에 multer 모듈을 이용해 image 업로드... (0) | 2023.05.16 |
2023.05.11 TIL - Sequelize (timestamp) (0) | 2023.05.11 |