이 문서는 Google Cloud Translation API를 사용해 자동 번역되었습니다.
어떤 문서는 원문을 읽는게 나을 수도 있습니다.
단일 페이지 애플리케이션 및 모바일 클라이언트의 등장으로 백엔드 보안의 새로운 시대가 열렸습니다. 과거에는 대부분의 백엔드 애플리케이션이 서버측에서 렌더링되었습니다. 즉, 서버에서 HTML을 생성하여 클라이언트로 전송했습니다. 이것은 모든 민감한 데이터가 서버에 보관되고 클라이언트는 HTML만 볼 수 있음을 의미했습니다.
요즘에는 클라이언트 측 렌더링을 통해 클라이언트가 데이터에 액세스할 수 있고 HTML이 클라이언트 측에서 생성됩니다. 이는 데이터가 서버에서 더 이상 안전하지 않으며 보호되어야 함을 의미합니다.
데이터를 보호하는 한 가지 방법은 OAuth를 사용하는 것입니다. OAuth는 사용자가 자신의 데이터에 대한 타사 애플리케이션 액세스 권한을 부여할 수 있는 인증 프로토콜입니다. 그러면 타사 애플리케이션은 데이터에 액세스하는 데 사용할 수 있는 액세스 토큰을 갖게 됩니다.
데이터를 보호하는 또 다른 방법은 JSON 웹 토큰(JWT)을 사용하는 것입니다. JWT는 JSON 개체에서 데이터를 인코딩하기 위한 표준입니다. 그런 다음 데이터는 비밀 키로 서명되며 키를 가진 사람은 누구나 해독할 수 있습니다.
OAuth와 JWT 모두 장단점이 있습니다. OAuth는 더 안전하지만 JWT는 구현하기가 더 쉽습니다. 이 기사에서는 OAuth와 JWT를 모두 사용하여 백엔드 애플리케이션을 보호하는 방법을 배웁니다.
OAuth는 사용자가 자신의 데이터에 대한 타사 애플리케이션 액세스 권한을 부여할 수 있는 인증 프로토콜입니다. 그러면 타사 애플리케이션은 데이터에 액세스하는 데 사용할 수 있는 액세스 토큰을 갖게 됩니다.
OAuth는 인증 코드를 사용하기 때문에 JWT보다 안전합니다. 인증 코드는 한 번만 사용할 수 있으며 이후 무효화됩니다. 즉, 해커가 인증 코드를 손에 넣으면 한 번만 사용할 수 있습니다.
반면에 JWT는 갱신 토큰을 사용합니다. 새로 고침 토큰은 더 오랜 기간 동안 유효하며 새 액세스 토큰을 생성하는 데 사용할 수 있습니다. 즉, 해커가 새로 고침 토큰을 손에 넣으면 계속해서 새로운 액세스 토큰을 생성하고 데이터에 액세스할 수 있습니다.
OAuth는 SSL을 사용하기 때문에 더 안전합니다. SSL은 데이터를 암호화하는 프로토콜입니다. 즉, 해커가 데이터를 가로채더라도 읽을 수 없습니다.
JWT는 SSL을 사용하지 않습니다. 즉, 해커가 데이터를 가로채면 데이터를 읽을 수 있습니다.
OAuth를 사용하려면 애플리케이션을 OAuth 공급자에 등록해야 합니다. 그러면 공급자가 클라이언트 ID와 클라이언트 암호를 제공합니다. 클라이언트 ID는 애플리케이션을 식별하는 데 사용되며 클라이언트 암호는 애플리케이션을 인증하는 데 사용됩니다.
그런 다음 사용자를 공급자의 인증 페이지로 리디렉션해야 합니다. 그러면 사용자에게 자신의 데이터에 대한 애플리케이션 액세스 권한을 부여하라는 메시지가 표시됩니다.
사용자가 애플리케이션 액세스 권한을 부여하면 공급자는 인증 코드와 함께 사용자를 리디렉션 URI로 리디렉션합니다. 그러면 애플리케이션이 인증 코드를 사용하여 제공자에게 액세스 토큰을 요청합니다.
그러면 공급자는 애플리케이션에 액세스 토큰을 반환합니다. 그러면 애플리케이션이 액세스 토큰을 사용하여 데이터에 액세스할 수 있습니다.
JWT는 JSON 개체에서 데이터를 인코딩하기 위한 표준입니다. 그런 다음 데이터는 비밀 키로 서명되며 키를 가진 사람은 누구나 해독할 수 있습니다.
JWT는 공급자에 애플리케이션을 등록할 필요가 없기 때문에 OAuth보다 구현하기 쉽습니다. OpenSSL과 같은 도구로 수행할 수 있는 비밀 키를 생성해야 합니다.
JWT로 데이터를 인코딩하려면 데이터를 base64로 인코딩해야 합니다. 그런 다음 비밀 키로 데이터에 서명할 수 있습니다. 그런 다음 서명을 base64로 인코딩할 수 있습니다. 그런 다음 데이터, 서명 및 비밀 키를 연결하여 JSON 개체에 넣을 수 있습니다.
그런 다음 JSON 개체를 클라이언트에 전달할 수 있습니다. 그런 다음 클라이언트는 데이터를 디코딩하고 서명을 확인할 수 있습니다. 서명이 유효하면 데이터를 신뢰할 수 있습니다.
데이터를 디코딩하려면 클라이언트에 비밀 키가 필요합니다. 이것은 보안 관점에서 이상적이지 않은 클라이언트에 비밀 키를 보내야 함을 의미합니다.
OAuth와 JWT 모두 장단점이 있습니다. OAuth는 더 안전하지만 JWT는 구현하기가 더 쉽습니다. 이 기사에서는 OAuth와 JWT를 모두 사용하여 백엔드 애플리케이션을 보호하는 방법을 배웠습니다.