본문 바로가기
STUDY/Spring

Authentication (인증)

by HR_J 2024. 5. 21.

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