JWT
Json Web Token, 모바일이나 웹 사용자 인증을 위해 사용하는 암호화된 Json 토큰이다.
- Base64url 인코딩되어 표현된다.
- self-contained 방식으로 정보를 전달한다.
- JWT 토큰을 HTTP 헤더에 실어 서버가 사용자를 식별한다.
구조
Header.Payload.Signature
로 .으로 구분되는 세 파트로 표현된다.
- Header : JWT에서 사용되는 타입과 해시 암호화 알고리즘의 종류가 담겨있다.
- Payload : claim(속성 정보)을 포함한다.
- 클레임은 registered, public, private 세 종류가 있다.
- 클레임은 key-value 쌍으로 구성되었다.
- Signature : 시크릿을 포함해 암호화되어있다.
인증방식
- 사용자 ID,password 입력 로그인
- 서버는 요청 확인후 secret key 통해 access token 발급
- JWT 토큰을 클라이언트에 전달
- 클라이언트가 API를 요청할때 authorization header에 access token 포함
- 서버는 JWT signature을 체크하고 Payload로 사용자 정보를 확인해 데이터 반환
장단점
- 장점
- 별도의 저장소가 필요없다.
- 다른 로그인 시스템에 접근 및 권한 공유가 가능하다.
- 단점
- 토큰의 길이가 길어 요청이 많아지면 네트워크에 부하를 일으킬 수 있다.
- 토큰 탈취의 위험성이 있다.
OAuth
인터넷 사용자들이 비밀번호를 제공하지 않고 다른 웹사이트 상의 자신들의 정보에 대해 웹사이트나 애플리케이션의 접근 권한을 부여할 수 있는 공통적인 수단으로서 사용되는, 접근 위임을 위한 개방형 표준이다.
제각기인 인증방식을 표준화했다. OAuth 인증을 공유하는 애플리케이션끼리는 별도의 인증이 필요없어 여러 애플리케이션을 통합하여 사용하는 것이 가능하다.
인증 방식
- request token 요청, 발급
- 사용자 인증 페이지 호출
- 사용자 로그인 완료
- 사용자의 권한 요청 및 수락
- Access token 발급
- Access token을 이용해 서비스 정보 요청
- Access token 검증, 서비스 제공
OAuth 2.0 구성
- resource owner : 사용자
- resource server : 구글, 페이스북, 트위터 등 OAuth 제공자
- client : 리소스 서버에서 제공하는 자원을 사용하는 애플리케이션
- authorization server : 사용자 동의를 받아 권한을 부여 및 관리하는 서버
JWT vs OAuth
- JWT : 토큰의 한 종류
- OAuth : 토큰을 발급하고 인증하는 오픈 스탠다드 프로토콜, framework