토큰 기반 인증
: 사용자가 자신의 Identity를 확인하고 고유한 액세스 토큰을 받을 수 있는 프로토콜 (통신규약)
: 사용자는 토큰 유효 시간 동안 웹 페이지 및 웹, 토큰으로 보호받는 리소스를 돌아 갈때마다 자격증명을 다시 입력할 필요 없이 액세스 할 수 있음
- 인증 토큰의 종류
: 연결형 (키, 디스크, 드라이브 및 기타 물리적 장치가 시스템에 연결되어 액세스를 허용)
: 비접촉형 (디바이스와 서버가 충분한 거리에서 연결되어 액세스를 허용)
: 분리형 (디바이스가 먼 거리에서 접촉 없이 서버와 통신하여 액세스를 허용)
- 토큰의 인증 절차
: 요청 (사용자가 서버에 요청)
: 확인 (서버가 사용자의 액세스 여부를 확인)
: 토큰 (서버가 링, 키, 휴대전화 등의 인증 디바이스와 통신. 확인 후 토큰을 발급하여 사용자에게 전달)
: 저장 (작업이 지속되는 동안 토큰이 사용자의 브라우저에 저장됨)
JWT (JSON Web Token)
: 인증에 필요한 정보들을 암호화 시킨 개방형 토큰
- 구성 요소
: 헤더 (토큰 유형을 비롯한 관련된 서명 알고리즘을 정의)
: 페이로드 (토큰 발급자, 토큰 유효기간 등을 정의)
: 서명 (보안 서명을 통해 메시지가 바뀌지 않은 것을 확인)
- 장점
: 크기 (JSON 형식의 데이터이기 때문에 용량이 작음)
: 용이성 (거의 모든 곳에서 토큰을 생성할 수 있으며, 서버에서 확인할 필요가 없음)
: 제어 (액세스 가능한 데이터, 권한 지속 시간, 로그인 시 가능한 작업 지정 가능)
- 단점
: 단일키 (키가 유출될 경우 보안 위협 가능)
: 복잡성 (암호 서명 알고리즘에 대한 이해 필요)
: 제한 (메시지를 모든 클라이언트에 push 할 수 없고 서버 측 클라이언트 관리 불가)
토큰 인증 타입
: http 헤더의 Authorization에 해당하는 부분
- Basic
: 사용자의 아이디와 암호를 Base64로 인코딩한 값을 토큰으로 사용 (RFC 7617)
- Bearer (전달자)
: JWT 혹은 OAuth에 대한 토큰 사용 (RFC6750)
: 일반적인 토큰 (JWT가 아니어도 된다는 뜻)
- Digest
: 서버에서 난수 데이터 문자열을 클라이언트에 보내고 클라이언트는 사용자 정보와 nonce를 포함하는 해시값으로 응답 (RFC 7616)
- HOBA
: 전자 서명 기반 인증 (RFC 7486)
- Mutual
: 암호를 이용한 클라이언트-서버 상호 인증 (draft-left-httpauth-mutual)
- AWS-HMAC-SHA256
: AWS 전자 서명 기반 인증
- 커스텀
: memberToken, apikey, token, myCustomToken 등 개발자가 임의로 정한 Scheme 이름
Bearer Token과 JWT의 차이
- Token
: 본질적으로는 의미가 없는 문자열의 조합
: 해당 Token에 대해 DB 조회를 하여 맞는 권한을 요청하는 방식
- JWT
: 자체적으로 요청을 인코딩하여 서명(signing)을 통해 확인 (verify) 가능
: 상태를 저장하지 않기 때문에 DB나 저장소가 불필요 (stateless)
: JWT 만으로 많은 것들을 확인 할 수 있어 인증 프로세스 간소화
Reference
'Development > Development' 카테고리의 다른 글
AI로 더 빠르고 쉽게 와이어 프레임 만들기 (0) | 2023.07.07 |
---|---|
코드 리뷰어를 하며 저지른 실수 7가지 (0) | 2023.07.07 |
코드 리뷰가 개발 문화에 미치는 영향 (0) | 2023.06.20 |
개발자가 테스트를 보는 세 가지 관점 (0) | 2023.06.20 |
MSA를 위한 API 게이트웨이 패턴 (0) | 2023.06.17 |