JWT(Json Web Token)와 OAuth는 웹 및 애플리케이션 개발에서 인증과 권한 부여를 다루는 데 널리 사용되지만, 기본적으로 다른 목적과 구조를 가집니다.
JWT (Json Web Token)
- 정의: JWT는 JSON 객체를 사용하여 두 당사자 사이에서 정보를 안전하게 전송하기 위한 표준 포맷입니다. 이 정보는 디지털 서명되어 있어, 검증이 가능하며 변조가 어렵습니다.
- 주용도: 주로 인증 이후 사용자의 정보와 세션을 표현하는 토큰으로 사용됩니다. 서버는 클라이언트의 요청과 함께 전송된 JWT를 검증하여, 해당 요청이 유효한 사용자로부터 왔는지를 확인할 수 있습니다.
- 자체 포함적: JWT는 필요한 모든 정보(예: 사용자의 식별 정보, 토큰의 만료 시간 등)를 자체적으로 포함하고 있어, 상태를 유지할 필요가 없습니다. 이로 인해 서버 측에서 별도의 세션 관리 없이 상태가 없는(stateless) 인증 방식을 구현할 수 있습니다.
OAuth
- 정의: OAuth는 제3자 애플리케이션에게 사용자의 웹 서비스 리소스에 접근할 수 있는 권한을 안전하게 부여하기 위한 표준 프로토콜입니다.
- 주용도: 주로 서드 파티 애플리케이션에게 사용자 대신 특정 리소스에 접근할 수 있는 권한을 부여하는 데 사용됩니다. 사용자는 자신의 인증 정보를 직접 공유하지 않고도, 서드 파티 애플리케이션이 필요한 정보에만 접근할 수 있도록 허용할 수 있습니다.
- 프로토콜/프레임워크: OAuth는 인증과 권한 부여에 관한 여러 절차와 흐름을 정의하는 프레임워크입니다. OAuth2.0의 경우, 다양한 플로우(예: 권한 부여 코드 플로우, 암시적 플로우, 클라이언트 자격증명 플로우 등)를 제공하여 다양한 시나리오를 지원합니다.
JWT와 OAuth의 주요 차이점
- 목적: JWT는 정보를 안전하게 전달하고 검증하기 위한 토큰 포맷입니다. OAuth는 제3자가 사용자의 이름으로 안전하게 행동할 수 있도록 권한을 부여하는 프로토콜입니다.
- 사용 사례: JWT는 인증 후 사용자 정보를 포함한 토큰을 생성하는 데 주로 사용되며, OAuth는 사용자가 제3자 애플리케이션에 특정 리소스에 대한 접근 권한을 부여할 때 사용됩니다.
- 작동 방식: JWT는 디지털 서명된 단일 토큰 형태로 정보를 포함하며, OAuth는 액세스 토큰을 발급받아 리소스에 접근하는 절차와 규칙을 정의합니다.
비유
OAuth의 개념을 이해하기 쉽게 실생활 예시로 설명해 드리겠습니다. 생각해볼 수 있는 일상적인 상황으로, '도서관에서 책을 빌리는 과정'을 OAuth 용어에 비유해 설명하겠습니다.
실생활 예시: 도서관에서의 책 대여
- 사용자: 이 예시에서 사용자는 당신입니다. 당신은 도서관에서 책을 빌리고 싶어 합니다.
- 서드 파티 애플리케이션: 당신의 친구가 이에 해당합니다. 당신은 바쁘기 때문에 친구에게 도서관에 가서 특정 책을 대신 빌려달라고 요청할 수 있습니다.
- 특정 리소스: 여기서 특정 리소스는 당신이 빌리고 싶은 책입니다.
- 리소스 서버: 도서관이 이 역할을 합니다. 도서관은 책(리소스)를 보유하고 있으며, 누가 해당 책을 빌릴 수 있는지를 관리합니다.
- 인증 서버: 도서관의 회원 서비스 데스크가 이 역할을 합니다. 당신이 도서관 회원임을 확인하고, 친구가 당신을 대신해 책을 빌릴 수 있는 권한을 부여받도록 합니다.
OAuth 과정에 비유
- 사용자 인증: 당신이 도서관의 회원임을 증명하기 위해, 도서관 카드를 회원 서비스 데스크에 제시합니다.
- 권한 부여: 당신은 친구에게 특정 책을 빌려달라고 부탁합니다. 이는 '친구에게 특정 리소스(책)에 대한 접근 권한을 부여하는 것'에 해당합니다.
- 액세스 토큰 발급: 회원 서비스 데스크는 당신의 친구에게 대출증을 발급합니다. 이 대출증은 '액세스 토큰'과 비슷하게, 당신의 친구가 도서관에서 특정 행동(책 대출)을 할 수 있는 권한을 부여받았음을 증명합니다.
- 리소스 접근: 친구는 대출증(액세스 토큰)을 사용해 도서관에서 책을 빌립니다. 이 과정에서 도서관은 대출증을 확인하여, 친구가 책을 대출할 권한이 있는지 검증합니다.
이 예시에서, 당신은 개인 정보(도서관 카드)를 직접 친구에게 제공하지 않고도, 친구가 도서관에서 당신을 대신해 책을 빌릴 수 있도록 권한을 부여했습니다. 마찬가지로, OAuth를 사용하는 온라인 서비스에서도 사용자는 자신의 인증 정보를 직접 제3자 애플리케이션과 공유하지 않고, 그 애플리케이션이 특정 리소스에 접근할 수 있는 권한만을 부여받습니다. 이를 통해 보다 안전하게 서비스를 이용할 수 있습니다.
'여러가지 > 이것저것' 카테고리의 다른 글
XSS(Cross-Site Scripting)? (1) | 2024.03.21 |
---|---|
SQL Injection (0) | 2024.03.21 |
OAuth1.0 과 OAuth2.0 (0) | 2024.03.21 |
JWT란 (0) | 2024.03.21 |
단방향 암호화 (0) | 2024.03.21 |