Authentication
서버로 요청을 보낼 때, 요청 헤더에 Authorization : <type><credentials>을 담아 보냄.
두가지 타입 존재 : Basic, Bearer
Basic 인증
가장 기본적인 인증 방식.
인증 정보로 사용자 ID, 비밀번호를 사용
base64로 코딩한 “사용자ID:비밀번호” 문자열을 Basic과 함께 인증헤더에 입력
웹표준 RFC 7617
Base64는 디코딩이 가능하기 때문에 반드시 HTTS, SSL/TLS로 통신해야 안전하다.
https://datatracker.ietf.org/doc/html/rfc7617
Authorization: Basic base64({USERNAME}:{PASSWORD})
Basic 인증의 장단점
장점
간단하다. ( 사용자ID, 비밀번호 외에 로그인페이지나 별도의 인증정보 요구 ㅌ)
인증이 단순하고 구축하기 쉽다.
단점
서버에 사용자 목록을 저장한다.
→ 요청한 리소스가 많거나 사용자가 많으면 권한을 확인하는데 시간이 길어진다.
→ 서버에 현실적으로 저장할 수 있는 데이터가 한정되어있다. (변화 잦거나, 사용자 많을 경우 부담)
사용자 권한을 정교하게 제어 불가능.
→세세하기 권한 설정을 하려면 추가 구현이 필요하다.
Bearer 인증
OAuth 2.0 프레임워크에서 사용하는 토큰 인증 방식
“Bearer” : 소유자, “이 토큰의 소유자에게 권한을 부여하라”의 의미.
Bearer와 Token을 인증헤더에 입력.
웹표준 RFC 6750
https://datatracker.ietf.org/doc/html/rfc6750
Authorization: Bearer <token>
OAuth 2.0 프레임 워크
소셜 로그인 등의 서비스에 이용된다.
⇒ 회원가입을 하지 않아도 구글과 같은 소셜 계정으로 바로 이용할 수 있음.
구글 등 특정 회사 내의 데이터 일부를 서드파티 서비스와 공유한다.
제 3자의 클라이언트에게 보호된 리소스를 제한적으로 접근하게 해주는 프레임워크
OAuth 구성요소
- 리소스 소유자: 사용자
- 클라이언트: 사용자의 정보를 접근하는 제 3자의 서비스
- 인증 서버: 클라이언트의 접근을 관리하는 서버
- 리소스 서버: 리소스 소유자의 데이터를 관리하는 서버
사용 프로세스
리소스 소유자의 동의가 확인되면 인증 서버가 클라이언트에게 액세스 토큰을 발급해줌
- 클라이언트는 액세스 토큰을 사용해서 리소스 서버에 보호된 데이터를 불러옴
- 보호된 데이터란, 구글의 닉네임, 프로필사진 등
Token 인증 방식
세션을 사용 했을 때, 서버에 두는 세션 저장소
여러 서버일 때 처리해야할 문제 한방에 해결
쿠키 사용하지 않아도 되어, 쿠키 탈취 시의 보안 취약점들 사라짐
서버가 여러대여도 secret_key값만 알고 있으면 토큰 Valid 가능.
Bearer 토큰
불투명한 문자열 (Opaque) : 16진수 문자열, JSON Web Token(JWT, RFC7519) 등
클라이언트가 해석할 수 없는 상태여야함 → 사용자 정보 전달 XXXXXX
서버에서 클라이언트의 권한을 확인 할 수 있는 메타 데이터가 토큰에 인코딩되어 있어야한다.
⇒ 충분히 복잡한 알고리즘을 사용해서 발급
Bearer 인증의 장단점
장점
인증이 안전하고 확장이 쉬움.
쉽게 복호화 할 수 없으며, SSL/TLS를 필수로 사용
서버에서 토큰의 리소스 접근권한을 쉽게 철회 가능
토큰의 유효기간 설정 → 안전하게 리소스 보호
제한적으로 리소스 접근 정교하게 설정 가능
Bearer 토큰 자체가 메타 데이터 보유 → 서버의 보관 X
토큰 검증시 같은 시간이 소요됨.
단점
보안적인 문제 → 토큰 노출시 다른 서비스도 토큰으로 바로 리소스 접근 가능.
⇒ 하지만, 서버가 OAuth 프레임워크에 정의된 보안 장치를 잘 구축하면 문제가 없고, 노출이 발견되면 해당 토큰의 권한을 철회가능
Basic 인증과 Bearer 인증의 대표적인 차이점
보안 | 확장성 | 복잡성 | |
Basic 인증 | 쉽게 복호화할 수 있는 base64를 사용하고, 노출된 인증 정보를 철회할 방법이 없음 | 사용자 정보를 서버에 저장하기 때문에 사용자 많을 수록 서버에 부담됨 | 간단한 인증 방법이지만, 정교하게 권한을 제어하기 어려움 |
Bearer 인증 | 충분히 복잡한 알고리즘으로 토큰을 발급하고, 토큰이 노출되면 권한을 철회할 수 있음 | Bearer 토큰이 메타데이터를 담고 있어서 사용자가 많아도 서버에 부담되지 않음 | 정교하게 권한을 제어할 수 있고 유효기간, MFA 등 추가 장치도 연동할 수 있음 |
결론
지금 구현중인 TodoApp에서는 로그인, 회원가입시 어떠한 인증을 사용해야하는지 고민중에 있었다. 도전을 위해서, 일단 Bearer 인증을… 구현해 보아야겠다. 개인적으로 OAuth 2.0 프레임 워크의 동작 과정 등 도 따로 공부해봐야겠다.
'STUDY > Spring' 카테고리의 다른 글
REST API (0) | 2024.05.09 |
---|---|
DDD: Domain Driven Design (0) | 2024.05.07 |