13P by xguru 2달전 | favorite | 댓글과 토론
  • SAML(Single Assertion Markup Language)은 XML 형식의 보안 관련 메시지를 교환하기 위한 규칙을 정의하는 표준
  • 주로 3개 이상의 독립된 엔티티 간 메시지 교환에 사용됨
    • 일반적인 시나리오는 서로 다른 회사에서 만든 두 소프트웨어 시스템과 사용자가 관련된 경우
    • 두 시스템은 사용자에 대한 정보를 교환해야 함
    • 커스텀 인티그레이션 할 수도 있지만 유지보수가 어려움
  • SAML은 시스템 간에 동일한 규칙을 따르게 하여 복잡한 통합 작업을 단순화함

SAML 메시지 형식

  • SAML 메시지는 XML 형식으로 이루어짐
  • 메시지 구문을 정의하고 메시지 내용을 안전하게 처리하는 방법을 알려줌
  • <Response> 태그를 받으면 <Assertion> 태그를 찾아야 한다는 것 등을 알 수 있음
  • 디지털 서명이 어떻게 생겼는지, 보안 문제를 피하기 위해 메시지를 어떻게 처리해야 하는지에 대한 지침을 제공함

SAML의 유연성

  • SAML은 유연성을 강조하여 설계됨. 원칙적으로는 SAML로 많은 작업을 할 수 있음, 하지만 그 유연성이 복잡성으로 이어짐
  • SAML 사양에는 수많은 예외사항이 있고, 많은 if와 예를 들어가 있어서 엣지 케이스를 추가함
  • SAML은 오래됐기 때문에 일부 사람들은 유연성을 활용함
  • 실제 운영 환경, 특히 레거시 시스템에서는 SAML이 비정상적인 동작을 하는 경우가 있음
  • 대부분은 SAML의 작은 하위 집합에만 집중하면 삶이 더 편해짐

SAML의 실제 사용 목적

  • SAML은 주로 Single Sign-On(SSO)에 사용됨
  • SAML은 몇 가지 이상한 SSO 유형을 정의하지만, 일반적으로 Web Browser SSO Profile을 사용함
  • 최종 사용자는 중앙 집중식 시스템에 먼저 인증한 다음 원하는 소프트웨어 애플리케이션에 액세스함
  • 사용자는 애플리케이션에 직접 인증하지 않음
  • 예를 들어 Okta를 사용하여 이메일에 액세스한 적이 있다면 Web Browser SSO Profile을 사용한 것임

SSO에 관련된 엔터티

  • SSO에는 3가지 주체가 관련됨:
    1. 사용자: 애플리케이션을 사용하려는 사람
    2. 서비스 제공자(SP): 애플리케이션 자체
    3. ID 제공자(IDP): 사용자가 인증에 사용할 중앙 서비스
  • 각 고객의 IDP는 데이터베이스로 간주할 수 있음. 사람들에 대한 데이터를 추적함
    • 회사는 종종 ID 제공자를 사용하여 직원을 부서에 할당하고 다양한 권한을 부여함
  • SAML을 통해 사용자를 로그인할 때마다 IDP에서 정보를 가져와야 함. SSO에서는 주로 IDP에 사용자 ID 확인을 요청
  • IDP와 사전 구성된 신뢰 관계가 필요함
    • SAML SSO를 사용하는 모든 고객은 애플리케이션에서 자체 설정이 필요
    • 하지만, IDP와 직접 메시지를 주고받지는 않음. SAML SSO에서는 서비스 제공자와 ID 제공자가 사용자의 브라우저를 통해 통신함

SAML 엔터티 간 상호 작용 방식

  • 일반적인 SAML SSO 프로세스:
    1. 사용자가 웹 브라우저에서 애플리케이션의 일부에 액세스하려고 함
    2. 사용자에게 유효한 보안 컨텍스트가 있는지 확인
    3. 사용자에게 유효한 보안 컨텍스트가 없으므로 로그인 페이지 표시
    4. 사용자가 일부 정보(예: 이메일 주소)를 입력하면 적절한 로그인 방법을 결정하는 데 사용됨
    5. 사용자를 IDP의 웹 주소로 리디렉션하고 사용자의 브라우저를 통해 SAML 메시지를 IDP에 전달
    6. IDP는 사용자에게 자격 증명을 묻는 메시지를 표시. 사용자가 성공적으로 인증됨
    7. IDP는 사용자의 인증에 대한 정보를 전달하는 SAML 메시지와 함께 사용자를 애플리케이션으로 다시 리디렉션함
    8. SAML 메시지를 처리하고 사용자에 대한 보안 컨텍스트를 설정해야 한다고 판단함
    9. 사용자에게 애플리케이션의 원하는 부분에 대한 액세스 권한을 부여함
  • ID 공급자에서 SAML SSO 프로세스를 시작할 수도 있음
  • 이 경우 인증 요청을 보내지 않고 인증 응답을 받게 됨
  • SAML SSO 지원을 구현할 때 IDP에서 시작한 SSO에 대비해야 함

SAML에서 교환되는 메시지

  • SAML SSO에서 주로 2가지 메시지가 관심사임
    • 서비스 제공자에서 IDP로 가는 메시지를 SAML 요청(request)이라고 함
    • IDP에서 서비스 제공자로 돌아오는 메시지를 SAML 응답(response)이라고 함
  • SAML 요청은 실제로 그리 복잡하지 않음. XML을 HTTP 리디렉션을 통해 보내는 것으로 충분함
  • <AuthnRequest> 태그에 ID를 포함하여 IDP가 원래 요청과 연결된 <Response>를 공유할 수 있도록 함
  • <Issuer> 태그로 감싼 데이터도 IDP에 보내서 누구인지 알려줌
  • SAML 응답은 더 까다로움. 일반적으로 POST를 통해 전송됨
  • <Response>는 개념적으로 몇 개의 <Assertion> 태그를 감쌈
  • <Assertion>은 사용자에 대한 클레임(누구인지, IDP로 어떻게 인증했는지 등)을 감쌈
  • Assertion을 처리하여 사용자를 로그인할지 여부를 결정함

주의사항

  • 여기서는 많은 세부 사항, 특히 보안상 중요한 내용들을 생략했음
  • SAML에 개인적으로 관심이 있거나 전문적으로 깊이 조사할 이유가 없다면 SAML 기반 로그인을 직접 구현하는 것은 권장하지 않음. 시간 낭비임
  • SAML을 가능한 한 빨리 설정하고 싶다면 우리가 SAML을 추상화한 오픈소스 SSOReady 를 제공함. 시간과 고통을 많이 절약해 줄 것임