웹사이트에 로그인할 때 구글, 페이스북, 링크드인, 깃허브 계정을 사용해 본 적이 있으신가요? 아니면 구글 드라이브와 같은 클라우드 저장소에서 웹사이트로 직접 파일을 업로드해 본 경험은 어떠신가요?
이 두 가지 모두 여러분의 정보가 저장된 다른 웹사이트나 서비스에 접근하는 웹사이트나 애플리케이션의 예시입니다. 그렇다면 개인 정보의 보안을 침해하지 않으면서, 외부 애플리케이션에 인증 정보를 제공하지 않고 어떻게 이러한 접근을 가능하게 할 수 있을까요?
페이스북을 예로 들어보겠습니다. 페이스북은 구글 계정에 저장된 연락처를 이용하여 플랫폼에서 친구를 찾아줍니다. 페이스북이 연락처에 접근하여 친구를 찾기 위해서는 사용자가 구글 계정에 대한 접근 권한을 부여해야 합니다.
과거에는 이 과정이 매우 단순한 방식으로 이루어졌습니다. 페이스북에 구글 이메일 주소와 비밀번호를 제공하면, 페이스북은 이를 사용하여 구글 계정에 로그인하고 연락처에 접근했습니다. 페이스북뿐만 아니라, 수많은 애플리케이션들이 다른 웹사이트에 저장된 사용자 데이터에 대한 인증을 이와 같은 방식으로 구현했습니다.
이처럼 타사 애플리케이션이 사용자 인증을 구현하는 방식이 많아지면서, 사용자는 서비스를 이용하기 위해 보안을 포기해야 하는 상황에 놓였습니다. 악의적인 개발자들은 사용자의 인증 정보를 쉽게 악용하여 피해를 입힐 수 있었습니다. 이러한 문제점이 OAuth 개발의 필요성을 불러일으켰습니다.
IETF(Internet Engineering Task Force)에 따르면, OAuth는 타사 애플리케이션이 리소스 소유자를 대신하여 서비스에 대한 접근 권한을 획득할 수 있도록 하는 권한 부여 프레임워크입니다. OAuth를 통해 사용자는 타사 애플리케이션에 제한된 접근 권한만을 부여할 수 있습니다.
이는 애플리케이션이 다른 애플리케이션에 저장된 프로필이나 개인 데이터와 같은 온라인 리소스에 접근할 때, 사용자 로그인 자격 증명을 직접 공개하지 않고 접근을 가능하게 합니다.
즉, 사용자가 자신의 자격 증명을 공유하지 않고도 타사 애플리케이션에게 다른 서비스에서 호스팅되는 리소스에 대한 제한된 접근 권한을 부여하는 위임 접근 방식이라고도 할 수 있습니다.
OAuth 2.0은 현재 가장 널리 사용되는 OAuth 프로토콜 버전이며, 웹 인증 및 권한 부여의 핵심 구성 요소로 자리 잡았습니다.
OAuth는 모바일 애플리케이션 인증, API 보안, 다양한 애플리케이션에 대한 싱글 사인온(Single Sign-On) 허용, 그리고 제3자에 대한 위임된 접근에 폭넓게 사용됩니다. 또한 사용자가 타사 애플리케이션에 부여한 권한을 관리하고 제어할 수 있도록 지원합니다.
오픈 소스 OAuth 플랫폼 사용의 장점
오픈 소스 OAuth 플랫폼은 OAuth 표준을 오픈 소스 방식으로 구현한 것을 의미합니다. 애플리케이션이 다양한 프로그래밍 언어와 프레임워크를 사용하여 개발된다는 점을 고려할 때, OAuth 플랫폼은 개발자가 애플리케이션에 OAuth 기능을 쉽게 통합할 수 있도록 라이브러리와 도구를 제공합니다. 오픈 소스 OAuth 플랫폼 사용의 주요 장점은 다음과 같습니다.
코드 품질 및 투명성
오픈 소스 플랫폼은 사용자가 해당 코드에 접근할 수 있도록 허용합니다. 이는 광범위한 기술 지식과 경험을 가진 개발자들이 코드를 검토하고, 발견된 문제점을 제기할 수 있다는 점에서 큰 이점을 제공합니다.
이러한 과정을 통해 코드가 취약점이나 오류 없이 최고 품질을 유지할 수 있도록 보장할 수 있습니다. 기업 또한 코드 검토를 통해 제품 사용을 결정하기 전에 요구 사항을 얼마나 잘 충족하는지 확인할 수 있습니다.
비용 효율성
오픈 소스 소프트웨어 솔루션은 무료로 사용할 수 있기 때문에, 기업이 적절한 OAuth 플랫폼을 도입함으로써 상당한 비용 절감 효과를 얻을 수 있습니다. 이는 예산이 부족한 기업도 사용자 보안을 확보할 수 있는 기회를 제공합니다.
공급업체 종속성 방지
오픈 소스 OAuth 공급자를 이용할 경우, 새로운 공급업체로 전환할 때 전체 애플리케이션 구조를 다시 설계할 필요 없이, 다양한 OAuth 공급자 간에 자유롭게 이동할 수 있습니다.
또한 오픈 소스 OAuth 솔루션은 널리 인정받는 표준을 준수하여 다른 시스템과의 호환성 및 상호 운용성을 보장합니다. 이러한 호환성은 다양한 오픈 소스 솔루션 간의 전환을 용이하게 합니다.
커뮤니티 지원
오픈 소스 솔루션은 소프트웨어 개선 및 업데이트 제공에 적극적으로 참여하는 대규모 개발자 커뮤니티의 지원을 받는 경우가 많습니다. 이러한 지원을 통해 개발자들은 소프트웨어 사용에 필요한 도구를 확보하고, 발생한 문제에 대해 도움을 받을 수 있으며, 소프트웨어 관련 문제를 신속하게 해결할 수 있습니다.
오픈 소스 OAuth 플랫폼 평가를 위한 주요 기준
오픈 소스 OAuth 플랫폼을 평가할 때는 다음의 핵심 요소들을 고려해야 합니다.
보안 및 암호화 조치
사용하는 오픈 소스 OAuth 솔루션이 민감한 사용자 데이터를 처리하고 리소스에 접근하는 만큼, 강력한 보안 및 암호화 조치를 갖추고 있는 것이 매우 중요합니다. 플랫폼은 보안 통신을 지원하고 접근 토큰을 보호하는 메커니즘을 제공해야 합니다.
통합 용이성 및 개발자 친화적인 API
OAuth 플랫폼은 애플리케이션에 통합되는 과정이 필요하므로, 솔루션은 통합 프로세스를 간소화하는 명확하고 직관적인 API, 설명서, 그리고 SDK(소프트웨어 개발 키트)를 제공해야 합니다.
또한 플랫폼의 엔드포인트는 널리 사용되는 프로그래밍 언어 및 프레임워크에 대한 코드 샘플 및 라이브러리와 함께 명확하게 문서화되어야 합니다.
커뮤니티 지원 및 활발한 개발
오픈 소스 리소스에 대한 활발한 사용자 및 기여자 커뮤니티는 리소스 주변의 건강한 환경을 나타냅니다. 이는 OAuth 솔루션이 지속적으로 개선되고 사용되고 있음을 의미합니다.
또한 활발한 커뮤니티는 오픈 소스 OAuth 솔루션을 이해하고 사용하는 데 도움이 되는 유용한 리소스와 지원을 제공할 수 있습니다.
확장성 및 성능
애플리케이션의 사용자 기반은 점점 늘어나는 경향이 있습니다. 따라서 사용하는 OAuth 솔루션은 증가하는 사용자 기반을 수용하고, 대량의 동시 요청을 처리할 수 있는 확장성을 갖추어야 합니다.
사용자 지정 및 확장성 옵션
OAuth 솔루션은 다양한 사용자의 비즈니스 요구 사항 및 논리에 맞게 사용자 정의가 가능해야 합니다. 기업은 OAuth 플랫폼에 따라 논리를 조정할 필요 없이, 필요에 따라 솔루션을 구성할 수 있어야 합니다.
OAuth 솔루션은 사용자 지정 인증 흐름, 클레임 및 사용자 속성을 추가하여 비즈니스 논리를 변경하지 않고도 적용할 수 있을 만큼 사용자 정의 및 확장 가능해야 합니다.
위의 고려 사항을 바탕으로, 다음 프로젝트에 활용할 수 있는 최고의 오픈 소스 OAuth 솔루션을 소개합니다.
수퍼토큰
SuperTokens는 HackeRank, Skoot, Food Market Hub와 같은 스타트업과 Google, Amazon, Meta와 같은 대기업 엔지니어들이 사용하는 오픈 소스 로그인 제공자입니다.
SuperTokens는 사용자 인증을 애플리케이션에 쉽게 통합할 수 있도록, 사용자 정의가 가능하고, 확장 가능하며, 재정의 가능한 컴포넌트를 제공합니다.
SuperTokens는 쉽고 빠른 통합을 지원할 뿐만 아니라, 가입 페이지 및 사용자 인증 기능을 위한 사전 구축된 사용자 인터페이스를 제공합니다. 또한 사용자는 SuperToken에서 제공하는 도우미 기능을 사용하여 자체 로그인 기능을 빠르게 구축할 수 있습니다.
SuperTokens를 사용하여 이메일-비밀번호 로그인, OAuth를 사용한 소셜 로그인, 그리고 애플리케이션에 비밀번호 없는 로그인을 구현할 수 있습니다. 또한 애플리케이션의 동일한 로그인 화면에서 소셜 로그인과 이메일-비밀번호 로그인을 함께 사용할 수 있습니다.
세르보스
Cerbos는 2022년 Business Wire에서 API 보안 부문 최고로 인정받은 오픈 소스, 언어 독립적이며, 확장 가능한 권한 부여 플랫폼입니다.
역할 및 권한을 구현하는 데 사용되는 권한 부여 레이어인 Cerbos는 Auth0, Magic, WorkOS, Okta, FusionAuth를 포함한 다양한 ID 제공업체와 연동됩니다.
Cerbos를 사용하면 모든 애플리케이션에서 권한 부여 로직을 중앙에서 관리하고, 애플리케이션이 인증 및 권한 부여를 처리하는 방식을 실시간으로 변경할 수 있습니다.
또한 Cerbos는 상황 인식 역할 정의 및 속성을 제공하며, 모든 기술 스택과 함께 사용할 수 있는 언어 독립적 API를 제공합니다.
Cerbos는 상태 비저장 방식으로 작동하며 자체 호스팅이 가능하고, 서버리스 플랫폼, 퍼블릭 또는 프라이빗 클라우드, 또는 프라이빗 소유 데이터 센터 등 어디에서나 호스팅할 수 있습니다.
여권
Passport는 Node.js 프레임워크에서 널리 사용되는 인증 미들웨어로, Node.js 백엔드로 구축된 애플리케이션에서 들어오는 요청을 인증합니다.
인증은 전략이라 불리는 플러그인을 사용하여 수행됩니다. Passport는 인증 실패 또는 성공 시 수행할 작업을 제어하기 위한 후크를 개발자에게 제공합니다.
Passport는 500개 이상의 인증 전략을 제공하며, OpenID 및 OAuth를 통한 싱글 사인온을 지원합니다. 또한 영구 세션, 동적 범위 및 권한, 사용자 정의 전략 구현, 인증 중 성공 및 실패를 처리하는 간편한 기능을 제공합니다.
Passport.js는 Node.js 애플리케이션에 경로를 마운트하지 않으며, 특정 데이터베이스 스키마를 가정하지 않기 때문에, 개발자는 모든 애플리케이션 수준 결정을 자유롭게 내릴 수 있습니다.
Auth.js
Auth.js는 Next.js, SvelteKit, SolidStart를 포함한 다양한 프런트엔드 프레임워크와 함께 작동하는 오픈 소스 인증 솔루션입니다.
Auth.js는 다양한 OAuth 버전에서 작동하도록 설계되었습니다. 데이터베이스 세션, 모든 백엔드, 이메일/비밀번호 없는 인증, 그리고 JSON 웹 토큰을 사용한 상태 비저장 인증을 지원합니다.
Auth.js는 서버리스 아키텍처를 위해 설계되었지만, AWS Lambda, Docker, Heroku 등 어디에서든 실행할 수 있습니다.
또한 Auth.js는 MySQL, Postgres, MongoDB, SQLite, MariaDB, Microsoft SQL Server와 같은 널리 사용되는 데이터베이스에 대한 지원 기능이 내장되어 있지만, 사용자가 데이터 제어권을 유지하고 데이터베이스 없이 작업할 수 있도록 보장합니다.
Auth.js는 POST 경로에서 CSRF(Cross-Site Request Forgery) 토큰을 사용하고, JSON 웹 토큰을 암호화하며, 개발 편의를 위해 대칭 서명 및 암호화 키를 자동으로 생성합니다.
키클록
Keycloak은 널리 사용되는 오픈 소스 ID 및 접근 관리 솔루션입니다. Keycloak은 표준 프로토콜 기반 솔루션이며 OAuth 2.0, SAML(Security Assertion Markup Language), OpenID Connect를 지원합니다.
오픈 소스 솔루션인 Keycloak은 통합이 매우 쉽고, 싱글 사인온과 같은 기능을 제공하여 사용자가 Keycloak에 한 번 로그인하여 여러 애플리케이션에 접근할 수 있도록 합니다.
또한 Keycloak은 사용자 인증 및 저장 기능을 처리하므로, 개발자는 애플리케이션에서 로그인 폼을 직접 만들 필요가 없다는 장점이 있습니다.
KeyCloak의 강점 중 하나는 애플리케이션과의 통합 용이성입니다. KeyCloak을 사용하면 애플리케이션이나 코드를 변경하지 않고도 소셜 네트워크를 사용하여 애플리케이션에 로그인하는 기능을 쉽게 추가할 수 있습니다.
이 모든 작업은 사용자 페더레이션 및 ID 브로커링과 같은 추가 Keycloak 기능을 구성할 수 있는 관리 콘솔을 통해 수행됩니다. 관리 콘솔을 통해 애플리케이션과 서비스를 생성 및 관리하고, 권한 부여 정책을 세밀하게 조정할 수 있습니다.
아페레오 CAS
Apereo CAS는 오픈 소스 싱글 사인온 솔루션 및 ID 제공업체입니다. CAS는 OAuth 2.0, SAML, OpenID, REST, WS-Federation 등 다양한 인증 프로토콜을 지원합니다.
CAS에는 비밀번호 관리, 알림, 사용 약관, 그리고 가장 기능에 대한 기본 지원 기능이 내장되어 있습니다.
또한 CAS는 플러그형 인증, 페이스북, 트위터, OpenID Connect와 같은 외부 ID 공급자에 대한 위임된 인증, 구글 OTP, Authy, YubiKey, Acceptto, Inwebo와 같은 공급자를 통한 다단계 인증을 지원합니다.
CAS를 사용하려면 Java, .NET, Apache, PHP 등 공식적으로 지원되는 클라이언트 플랫폼과 함께 사용하는 것이 가장 좋습니다.
오리 크라토스
Ory Kratos는 클라우드 환경에 적합한 강력하고 기능이 풍부한 사용자 관리 시스템입니다. Ory Kratos는 Go 언어로 작성되었지만, 사용자 정의 로그인, 가입 및 프로필 관리를 위한 모든 프로그래밍 언어용 SDK를 제공합니다.
또한 Ory Kratos는 모든 UI 프레임워크에서 작동하며, 설정에 필요한 코드 양이 최소화되어 있습니다.
Ory Kratos의 주요 기능으로는 다양한 제공자를 통한 다단계 인증, 셀프 서비스 로그인 및 가입, 소셜 네트워크 로그인, 계정 확인 및 복구, 사용자 관리가 있습니다.
사용자 관리를 통해 사용자 기반에서 ID 및 관련 데이터를 생성, 업데이트 및 삭제할 수 있습니다. Ory Kratos는 사용자 정의 ID 모델을 제공하여 고유한 인터페이스를 만들고, 이름, 주소, 좋아하는 애완 동물과 같은 사용자 정의 필드를 정의할 수 있습니다.
로그토
설명에 따르면, Logto는 독점 인증 및 권한 부여 솔루션인 Auth0에 대한 비용 효율적인 오픈 소스 대안입니다. Logto는 보안 인증 및 권한 부여에 필요한 모든 기능을 더 저렴한 가격으로 제공합니다.
Logto는 인증 공급자로 사용할 수 있는 즉시 사용 가능한 관리 API와 함께 제공됩니다. 또한 Logto를 구축 중인 모든 애플리케이션과 쉽고 빠르게 통합할 수 있는 SDK가 있습니다.
인증에는 OAuth 2.0 인증 프로토콜을 확장한 OIDC(OpenID Connect)가 사용되고, 권한 부여에는 RBAC(역할 기반 접근 제어)가 사용됩니다.
Logto를 사용하면 애플리케이션에 비밀번호 없는 로그인 및 소셜 로그인을 구현하고, 로그인 정보를 잊어버린 사용자를 처리할 수 있습니다. 개발 작업을 더욱 쉽고 빠르게 하기 위해 Logto는 사용자 정의 가능한 CSS를 사용하여 아름다운 사전 구축된 UI 컴포넌트를 제공합니다.
또한 사용자는 클라우드 플랫폼에 접근하여 애플리케이션에 구현된 인증을 사용자 지정하고 통합하고 미리 볼 수 있습니다.
결론
애플리케이션에 인증 및 권한 부여 기능을 구현할 때, 비용을 크게 절감할 수 있는 다양한 오픈 소스 솔루션을 사용할 수 있습니다. 귀사와 사용자의 중요한 데이터를 안전하게 보호하기 위해 이 문서에서 제시된 솔루션을 고려해 보시기 바랍니다.
최고의 사용자 인증 플랫폼에 대한 더 많은 정보를 찾아볼 수도 있습니다.