3 minute read

SSO 인증 프로토콜: SAML, OAuth, OpenID Connect 개념 설명

각 프로토콜의 정의, 작동 방식, 주요 특징, 사용 사례, 그리고 SSO 환경에서의 역할을 구조화하여 작성했습니다.


🔐 1. SAML (Security Assertion Markup Language)

정의

SAML은 XML 기반의 오픈 표준 프로토콜로, IdP와 SP 간 사용자 인증 정보와 권한 정보를 안전하게 교환하기 위해 설계되었습니다. SSO에서 사용자 인증(Authentication)과 권한 부여(Authorization)를 모두 지원하며, 주로 엔터프라이즈 환경에서 사용됩니다.

작동 원리

  1. 사용자 요청: 사용자가 SP(예: Salesforce)에 접근 시도.
  2. 리디렉션: SP는 사용자를 IdP(예: Okta)로 리디렉션하여 인증 요청.
  3. 인증: 사용자가 IdP에 로그인(비밀번호, MFA 등). IdP는 사용자 신원을 확인.
  4. SAML Assertion 전송: IdP는 XML 형식의 SAML Assertion(인증 및 속성 정보 포함)을 생성하고, 이를 브라우저를 통해 SP로 전송(POST 또는 리디렉션).
  5. 접근 허용: SP는 Assertion을 검증하고 사용자에게 접근 권한 부여.

주요 특징

  • XML 기반: 인증 정보는 XML 문서로 구조화, 서명 및 암호화로 보안 유지.
  • 인증 + 권한 부여: 사용자 신원뿐만 아니라 역할, 그룹 등 속성(Attribute) 전달.
  • 브라우저 기반: HTTP 리디렉션 또는 POST를 통해 사용자 브라우저로 정보 전달.
  • 신뢰 관계: IdP와 SP 간 사전 설정된 메타데이터 교환으로 신뢰 구축.

사용 사례

  • 엔터프라이즈 SSO: Okta(IdP)를 사용해 Salesforce, Workday, Slack(SP)에 SSO 제공.
  • 교육 기관: 대학 포털에서 SAML로 학습 관리 시스템(LMS)에 접근.

SSO에서의 역할

SAML은 강력한 인증과 속성 기반 접근 제어가 필요한 엔터프라이즈 환경에서 적합합니다. IdP에서 사용자 인증 후 SP로 역할(Role)이나 권한 정보를 전달해 세밀한 접근 제어가 가능합니다.


🔑 2. OAuth

정의

OAuth는 권한 부여(Authorization)를 위한 표준 프로토콜로, 사용자가 자신의 자격 증명을 공유하지 않고 특정 리소스에 대한 접근 권한을 제3자 애플리케이션에 위임할 수 있도록 합니다. SSO에서는 인증된 사용자 세션을 활용하여 여러 SP에 접근 가능합니다.

작동 원리

  1. 사용자 요청: 사용자가 SP(예: 앱)에서 리소스 접근 시도.
  2. 인가 요청: SP는 사용자를 OAuth 제공자(예: Google, IdP)로 리디렉션.
  3. 인증 및 동의: 사용자가 IdP에 로그인하고, SP에 특정 리소스 접근 권한을 승인.
  4. 액세스 토큰 발급: IdP는 액세스 토큰(Access Token)을 SP에 발급.
  5. 리소스 접근: SP는 토큰을 사용해 사용자 대신 리소스(예: Google Drive 파일)에 접근.

주요 특징

  • 토큰 기반: JSON 형식의 액세스 토큰 사용, 가볍고 API 친화적.
  • 권한 부여 중심: 인증보다는 특정 리소스 접근 권한 위임에 초점.
  • 범용성: 모바일, 웹, API 환경에서 널리 사용.
  • 제한된 권한: 토큰에 Scope(예: “email 읽기”만 허용)를 정의해 세밀한 제어.

사용 사례

  • 소셜 로그인: Google 계정으로 타사 앱(예: Notion)에 로그인.
  • API 접근: 개발자가 GitHub OAuth 토큰으로 사용자 리포지토리에 접근.

SSO에서의 역할

OAuth는 SSO에서 IdP의 인증 세션을 재사용하여 SP에 접근 권한을 부여합니다. 엄밀히 말해 OAuth는 인증 프로토콜이 아니지만, IdP가 인증을 처리한 후 토큰을 발급해 SSO를 구현합니다.


🆔 3. OpenID Connect (OIDC)

정의

OpenID Connect는 OAuth 2.0 위에 구축된 인증(Authentication) 프로토콜로, 사용자의 신원을 확인하고 사용자 정보(예: 이름, 이메일)를 SP에 제공합니다. SSO에서 현대적이고 표준화된 인증 방식으로 널리 사용됩니다.

작동 원리

  1. 사용자 요청: 사용자가 SP(예: 웹 앱)에 접근 시도.
  2. 인증 요청: SP는 사용자를 OIDC 제공자(예: Auth0, IdP)로 리디렉션.
  3. 인증: 사용자가 IdP에 로그인(비밀번호, MFA 등).
  4. ID 토큰 발급: IdP는 JSON Web Token(JWT) 형식의 ID 토큰(사용자 신원 정보 포함)과 액세스 토큰을 SP에 제공.
  5. 정보 확인: SP는 ID 토큰을 검증하고, 필요 시 액세스 토큰으로 사용자 정보(예: 프로필) 요청.

주요 특징

  • JWT 기반: ID 토큰은 서명된 JWT로, 사용자 신원 정보(예: sub, email) 포함.
  • 인증 중심: OAuth의 권한 부여를 확장해 사용자 인증에 초점.
  • RESTful: JSON과 HTTP로 가볍고 API 친화적.
  • 확장성: 사용자 프로필, 세션 관리, 로그아웃 등 지원.

사용 사례

  • 모던 웹/모바일 앱: Auth0를 사용해 웹 앱에 SSO 로그인 구현.
  • 소셜 SSO: Google, Facebook으로 타사 서비스에 로그인.

SSO에서의 역할

OIDC는 SSO를 위한 최신 인증 표준으로, IdP에서 사용자 인증 후 ID 토큰을 SP에 제공해 신원을 확인합니다. OAuth의 토큰을 활용하되, 명시적으로 인증을 처리합니다.


📊 SAML, OAuth, OpenID Connect 비교

항목 SAML OAuth OpenID Connect
주요 목적 인증 + 권한 부여 권한 부여 인증
데이터 형식 XML (SAML Assertion) JSON (액세스 토큰) JSON (JWT, ID 토큰)
SSO 환경 엔터프라이즈 중심 소셜 로그인, API 접근 모던 웹/모바일 앱
복잡성 설정 복잡, 보안성 높음 상대적으로 간단, API 친화적 OAuth 기반, 설정 간단
프로토콜 흐름 브라우저 기반 (POST, 리디렉션) 다양한 흐름 (Authorization Code 등) OAuth 흐름 확장 (Authorization Code 등)
사용 예시 Okta → Salesforce SSO Google → Notion 로그인 Auth0 → 회사 앱 SSO

결론

SAML, OAuth, OpenID Connect는 SSO에서 IdP와 SP 간 신뢰를 구축하는 핵심 프로토콜입니다. 각각의 프로토콜은 특정 환경과 요구사항에 따라 적합하게 사용됩니다.

  • SAML: 엔터프라이즈 환경에서 보안성과 속성 전달에 강점.
  • OAuth: 리소스 접근 권한 위임에 적합.
  • OIDC: 모던 앱의 인증에 최적화.

Comments