JWT와 OAuth
1. JWT란?
JWT(Json Web Token)은 Json 형식으로 인코딩되 데이터를 포함하는 토큰 기반의 인증 방식.
헤더, 페이로드, 서명 세 부분으로 이루어짐.
헤더 : 알고리즘과 타입이 들어있음
페이로드 : 사용자, 토큰 정보를 나타내는 클레임이라는 것으로 구성
서명 : 인코딩 된 헤더, 페이로드 그리고 비밀키(secret_key)를 가지고 헤더에 정의된 알고리즘으로 해싱하여 생성
JWT는 인증에만 사용되며, 사용자가 로그인을 하면 JWT를 생성하고 이를 사용하여 클라이어트가 서버에 인증을 요청할 수 있음.
1-1. 특징
서버에서는 특정 알고리즘을 통해 서명(Signature)되어 생성된 문자열을 클라이언트로 전달하고 클라이언트는 이 jwt token을 가지고 있다가 api를 호출할 때 전달해주기만 하면 됨.
전달된 jwt token은 서버에서 decoding 하여 payload를 확인한 다음 권한을 부여하게 됨.
1-2. 장점
- JWT는 DB에 저장하는 방식이 아니기 때문에 DB리소스가 필요없음.
- 여러 서비스 간에 통신에서 권한을 쉽게 제한하고 허가할 수 있음.
- 인증 및 권한 부여가 용이함.
1-3. 단점
- JWT가 탈취되었을 경우 누구나 해당 토큰의 권한을 가지고 서비스를 이용할 수 있음. -> 리프레시 토큰으로 해결할 수 있음.
- 토큰에 담고있는 정보가 많아질수록 데이터의 크기는 커짐 -> 네트워크 부하
2. OAuth란?
OAuth(Open Authorization) : OAuth는 인터넷 사용자들이 비밀번호를 제공하지 않고 다른 웹사이트 상의 자신들의 정보에 대해 웹사이트나 애플리케이션의 접근 권한을 부여할 수 있는 공통적인 수단으로서 사용되는, 접근 위임을 위한 개방형 표준이다.
OAuth 구성요소
| 구분 | 설명 |
| Resource Owner | 웹 서비스를 이용하려는 유저, 자원(개인정보)을을소유하는 자, 사용자’Resource’ 는 개인정보라고 생각하면 된다. |
| Client | 자사 또는 개인이 만든 애플리케이션 서버 |
| Authorization Server | 권한을 부여(인증에 사용할 아이템을 제공주는)해주는 서버다. |
| Resource Server | 사용자의 개인정보를 가지고있는 애플리케이션 (Google, Facebook, Kakao 등) 회사 서버 |
| Access Token | 자원에 대한 접근 권한을 Resource Owner가 인가하였음을 나타내는 자격증명 |
| Refresh Token | Client는 Authorization Server로 부터 access token(비교적 짧은 만료기간을 가짐) 과 refresh token(비교적 긴 만료기간을 가짐)을 함께 부여 받는다. |
2-1. 특징
직접 사용자가 로그인 하는것이 아닌, 소셜 미디어로 로그인을 할 경우, client(개인 서비스)는 Resource Owner(사용자)를 대신해 로그인 하는데,
이때 필요한 정보를 Resource Server(kakao, naver, …)에서 얻어 서로 비교해 유효성을 판단함.
client가 유저의 (로그인)정보/자원(resource)을 Resource Server에 요청해 대신 로그인 하는 것.
2-2. 장점
- 사용자는 자신의 인증 정보를 제공하지 않고도 서비스에 접근할 수 있으며, 클라이언트 애플리케이션은 사용자의 비밀 정보를 저장하지 않아도 된다.
- OAuth를 사용하면 소셜 미디어 계정을 통한 로그인이나 다양한 플랫폼 간에 사용자 인증 정보를 공유할 수 있다.
- 토큰을 사용하여 안전하게 권한을 부여하므로, 노출되더라도 실제 비밀 정보를 보호할 수 있다.
2-3. 단점
- OAuth의 구현과 이해가 상대적으로 복잡할 수 있으며, 처음 사용하는 개발자에게는 학습 곡선이 존재할 수 있다.
- 잘못된 구현이나 구성은 보안 문제를 야기할 수 있으며, 신뢰할 수 없는 애플리케이션이 권한을 받을 경우 보안 상의 위험이 발생할 수 있다.
- 사용자는 외부 서비스에 로그인하는 과정을 거쳐야 하므로, 초기 접근에서는 사용자 경험이 감소할 수 있다.



