API 인증 방법
이 문서에서는 세 가지 일반적인 API 인증 메커니즘, API 키, 기본 인증, 그리고 OAuth JWT 토큰에 대해 살펴보겠습니다. 마지막에는 Logto를 사용하여 OAuth JWT 토큰으로 API를 보호하는 방법도 다룰 것입니다.
이 문서에서는 세 가지 일반적인 API 인증 메커니즘, API 키, 기본 인증, 그리고 OAuth JWT 토큰에 대해 살펴보겠습니다. 마지막에는 Logto를 사용하여 OAuth JWT 토큰으로 API를 보호하는 방법도 다룰 것입니다.
오늘날의 세상에서 API는 현대 애플리케이션의 백본입니다. API는 백엔드 서비스에서 데이터와 기능에 접근하는 기본적인 방법입니다. API는 다양한 소프트웨어 시스템이 서로 다른 파티와 통신하고 데이터를 공유할 수 있게 하여 비즈니스에 없어서는 안 될 존재로 만듭니다. 그러나 API는 공격자들의 주된 타겟이기도 합니다. API 보호의 필요성이 그 어느 때보다 강해졌습니다.
API 보호는 무단 접근, 오용, 공격으로부터 API를 보호하는 과정입니다. 이것은 모든 API 전략에 있어 중요한 요소입니다. 이 문서에서는 세 가지 일반적인 API 보호 메커니즘인 API 키, 기본 인증, 그리고 OAuth JWT 토큰을 탐구할 것입니다. 마지막에는 Logto가 OAuth JWT 토큰을 사용하여 API를 보호하는 방법도 보여드리겠습니다.
API 키는 API를 보호하는 가장 간단하고 널리 사용되는 방법입니다. API 키는 API 제공자가 생성하고 승인된 사용자와 공유하는 긴 문자 문자열입니다. 이 키는 API에 접근할 때 요청 헤더에 포함되어야 합니다. API 키는 기본적인 보안 요구에 대해 단순하고 효과적입니다. 예를 들어, Google Maps API와 AWS와 같은 인기 있는 서비스는 접근을 제어하고 사용량을 모니터링하기 위해 API 키를 제공합니다. 그러나 API 키는 보안 측면에서 제한이 있습니다. 주로 기계 대 기계 통신에서 사용됩니다.
e.g.
기본 인증은 API를 보호하는 또 다른 일반적인 방법입니다. 이것은 HTTPS 프로토콜에 내장된 간단한 인증 스키마입니다. 기본 인증은 요청 헤더에 사용자 이름과 비밀번호를 전송하여 사용자 인증을 수행합니다. 서버는 자격 증명을 검증하고 유효한 경우 요청한 리소스를 반환합니다. 예를 들어, 많은 웹 애플리케이션과 RESTful API는 사용자를 신속하고 간단하게 인증하기 위해 기본 인증을 사용합니다.기본 인증은 API 키보다 보안적입니다. 그러나 여전히 민감한 데이터에 대해서는 충분히 안전하지 않으며, 평문으로 전송된 자격 증명이 도청 당할 수 있는 위험이 있습니다. 기본 인증은 네트워크 연결이 안전한 내부 시스템 e.g. 기계 대 기계 통신에 적합합니다.
e.g.
또는
RFC 7519에서 정의된 JSON 웹 토큰 (JWT)은 정보를 JSON 객체 형식으로 안전하게 전송하기 위한 개방형 표준입니다. 웹 애플리케이션과 API에서 인증과 권한 부여에 일반적으로 사용됩니다.
서명된 JWT는 다음 형식을 가집니다:
이것은 .으로 구분된 세 부분으로 구성됩니다: 헤더, 페이로드, 그리고 서명입니다.
다음은 JWT의 예입니다:
OAuth는 API 보안을 위한 포괄적인 개방형 표준이며, 접근 권한 위임을 위해 널리 사용됩니다. 이는 클라이언트 사용자가 다른 웹사이트에 자신의 비밀번호를 제공하지 않고도 정보에 접근할 수 있도록 웹사이트나 애플리케이션에 위임하는 방법으로 자주 사용됩니다.
JWT와 함께 사용될 때, OAuth JWT 토큰은 강력한 보안 솔루션을 제공합니다. 사용자 이름과 비밀번호와 같은 민감한 정보를 각 요청마다 전송하는 대신, OAuth JWT 토큰은 인증에 성공한 후 권한이 부여된 클라이언트에게 발급됩니다. 이러한 토큰은 사용자 및 그들의 권한에 대한 정보를 포함하며, JWT 토큰은 디지털 서명되어 변조 방지 기능을 제공하며, 만료될 수 있습니다. 이것은 추가적인 보안 계층을 제공합니다.
OAuth JWT 토큰의 주요 이점 중 하나는 유연성입니다. 이 토큰은 웹 및 모바일 앱, 단일 로그인 솔루션 등 다양한 유형의 응용 프로그램에서 사용할 수 있습니다. 예를 들어, Facebook, Twitter, LinkedIn과 같은 주요 소셜 미디어 플랫폼은 OAuth JWT 토큰을 사용하여 사용자를 인증하고, 제3자 애플리케이션이 사용자 데이터를 안전하게 접근할 수 있도록 합니다.
인증 방법의 선택은 애플리케이션의 특정 요구 사항과 보안 고려 사항에 따라 다릅니다. API 키는 간단하지만 보안이 낮고, 기본 인증은 보안성이 더 강하지만 사용자 신원 기능이 부족하며, OAuth JWT 토큰은 강력한 보안과 사용자 신원 기능을 제공하지만 구현 및 관리의 복잡도를 증가시킵니다.
Logto는 OAuth JWT 토큰을 사용하여 귀하의 API를 단순하고 안전하게 보호할 수 있는 방법을 제공합니다. OAuth 2.0과 OpenID Connect (OIDC) 표준을 모두 지원하므로 가장 적합한 인증 방법을 선택할 수 있습니다. 기계 대 기계 통신을 위해 client_credentials 흐름을 사용하고, 웹 애플리케이션을 위해 authorization_code 흐름을 사용할 수 있습니다.
Logto는 기계 대 기계 유형의 애플리케이션을 위해 client_credentials 흐름을 사용합니다. 이 흐름은 클라이언트가 클라이언트 자격 증명을 안전하게 저장할 수 있는 비밀 클라이언트인 백엔드 서버 통신에 적합합니다. 이 방법은 사용자와는 무관하기 때문에 "양족 OAuth"라고도 합니다. 클라이언트 자격 증명은 접근 토큰을 얻기 위한 승인 그랜트로 직접 사용됩니다.
통합 흐름은 간단하고 직관적입니다:
자세한 내용은 우리의 기계 대 기계 통합 문서를 확인해 주세요.
웹 애플리케이션과 같은 공개 클라이언트를 위해 Logto는 authorization_code 흐름을 사용하여 사용자를 인증합니다. 이 흐름은 클라이언트가 클라이언트 자격 증명을 안전하게 저장할 수 없는 공개 클라이언트인 웹 애플리케이션에 적합합니다. 이 방법은 사용자가 관련되어 있으므로 "삼족 OAuth"라고도 합니다. 사용자는 인증 서버로 리디렉션되어 인증과 클라이언트의 승인을 처리하게 됩니다. 클라이언트는 그런 다음 승인 코드를 사용하여 접근 토큰을 얻습니다.
통합 흐름은 기계 대 기계 흐름보다 약간 더 복잡합니다:
Express.js API를 JWT와 Logto로 보호하기 기사를 확인하여 JWT 토큰을 사용하여 React와 Express 서버 API를 통합하는 방법에 대한 종합적인 예시를 확인해 주세요.