SSO 인증 프로토콜에 대한 이해
SSO 인증 프로토콜: SAML, OAuth, OpenID Connect 개념 설명
각 프로토콜의 정의, 작동 방식, 주요 특징, 사용 사례, 그리고 SSO 환경에서의 역할을 구조화하여 작성했습니다.
🔐 1. SAML (Security Assertion Markup Language)
정의
SAML은 XML 기반의 오픈 표준 프로토콜로, IdP와 SP 간 사용자 인증 정보와 권한 정보를 안전하게 교환하기 위해 설계되었습니다. SSO에서 사용자 인증(Authentication)과 권한 부여(Authorization)를 모두 지원하며, 주로 엔터프라이즈 환경에서 사용됩니다.
작동 원리
- 사용자 요청: 사용자가 SP(예: Salesforce)에 접근 시도.
- 리디렉션: SP는 사용자를 IdP(예: Okta)로 리디렉션하여 인증 요청.
- 인증: 사용자가 IdP에 로그인(비밀번호, MFA 등). IdP는 사용자 신원을 확인.
- SAML Assertion 전송: IdP는 XML 형식의 SAML Assertion(인증 및 속성 정보 포함)을 생성하고, 이를 브라우저를 통해 SP로 전송(POST 또는 리디렉션).
- 접근 허용: 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에 접근 가능합니다.
작동 원리
- 사용자 요청: 사용자가 SP(예: 앱)에서 리소스 접근 시도.
- 인가 요청: SP는 사용자를 OAuth 제공자(예: Google, IdP)로 리디렉션.
- 인증 및 동의: 사용자가 IdP에 로그인하고, SP에 특정 리소스 접근 권한을 승인.
- 액세스 토큰 발급: IdP는 액세스 토큰(Access Token)을 SP에 발급.
- 리소스 접근: 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에서 현대적이고 표준화된 인증 방식으로 널리 사용됩니다.
작동 원리
- 사용자 요청: 사용자가 SP(예: 웹 앱)에 접근 시도.
- 인증 요청: SP는 사용자를 OIDC 제공자(예: Auth0, IdP)로 리디렉션.
- 인증: 사용자가 IdP에 로그인(비밀번호, MFA 등).
- ID 토큰 발급: IdP는 JSON Web Token(JWT) 형식의 ID 토큰(사용자 신원 정보 포함)과 액세스 토큰을 SP에 제공.
- 정보 확인: 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