포스트

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 TokenClient는 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의 구현과 이해가 상대적으로 복잡할 수 있으며, 처음 사용하는 개발자에게는 학습 곡선이 존재할 수 있다.
  • 잘못된 구현이나 구성은 보안 문제를 야기할 수 있으며, 신뢰할 수 없는 애플리케이션이 권한을 받을 경우 보안 상의 위험이 발생할 수 있다.
  • 사용자는 외부 서비스에 로그인하는 과정을 거쳐야 하므로, 초기 접근에서는 사용자 경험이 감소할 수 있다.
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.