[보안] SSO(Single Sign-On) 구현 1 - SAML(Security Assertion Markup Language)
by Sugar0810SAML은 인증 정보 제공자와, 서비스 제공자 간의 인증 및 인가 데이터를 교환하기 위한 XML기반의 표준 데이터 포맷입니다.
SAML이 출현하기 이전, 기업들은 독자적인 인터페이스 또는 특정한 SSO솔루션을 사용하여 SSO를 구축해야 했습니다.
SSO솔루션들은 Private망에서 인증정보를 Cookie에 담아 사용하는 등의 방법을 사용하였지만, Public 망에서는 보안적으로 문제가 있었습니다.
SAML은 인증정보를 XML포맷으로 생성하고, 이 XML데이터를 암호화함으로써 제 3자에게 내용을 노출시키지 않고 최종 수신자에게 전달할 수 있습니다.
이 때 생성한 XML을 Assertion이라고 부릅니다.
Assertion에는 ID공급자 이름, 발행일 및 만료일 같은 정보가 포함되어 있습니다.
항목별로 자세한 설명은 링크로 대신하겠습니다.
참고 : Glossary for the OASIS Security Assertion Markup Language (SAML) V2.0
※ 인증 플로우
SAML의 인증 플로우에는 3가지 역할이 있습니다.
- User : 인증을 원하는 사용자
- Identity Provider(IDP) : 인증 정보 제공자
- Service Provider(SP) : 서비스 제공자
1. 서비스 요청
유저가 서비스에 접근합니다. SP는 해당 유저가 이미 인증을 했는지 안했는지 체크합니다.
2. SSO 서비스 이동
인증되지 않은 유저이므로 인증 요청을 생성하여 클라이언트에 전송합니다.
SP에서 SAMLRequest를 생성하여 유저에게 전송합니다.
SP는 IDP와 직접연결되지 않고 유저의 브라우저에서 IDP로 SAMLRequest를 redirect하게 합니다.
3. SSO 서비스 요청
IDP는 SAMLRequest를 파싱하고 유저 인증을 진행합니다.
인증 방식은 패스워드, PKI등 다양하게 사용될 수 있습니다.
4. SAML응답
인증이 성공하게 되면 SAMLResponse를 생성하여 유저의 브라우저로 전송합니다.
SAMLResponse에는 SAMLAssertion이 포함됩니다.(XML형식)
IDP는 웹 브라우저에 Session Cokkie를 설정하고 해당 정보는 브라우저에 캐싱됩니다.
5. (POST)SAML 응답 전송
유저는 SP의 ACS(Assertion Consumer Service)의 URL에 SAMLResponse를 POST합니다.
6. 서비스 응답
ACS는 SAMLResponse를 검증하고 유효하다면 유저가 요청한 서비스로 유저를 Forwarding합니다.
로그인 성공!
로그인이 성공한 뒤에 로그인되지 않은 다른 서비스를 이용하려고 할 때에는 2번까지 동일한 과정입니다.
하지만 이미 인증이 성공한 SAMLResponse가 브라우저에 캐싱되어있으므로, 별도의 로그인 폼을 띄우지 않고 SAMLResponse를 SP에 전송하게 됩니다.
※ 단점
SAMLRequest, SAMLResponse는 XML형식이라 브라우저를 통해서만 동작 가능 → 모바일이나 Native Application에는 부적절한 형식
※ SSO 개념 보러가기
🎓 Reference
'💻 Computer Science > Network' 카테고리의 다른 글
[보안] SSO(Single Sign-On) 구현 3 - OIDC(OpenID Connect) (0) | 2023.02.14 |
---|---|
[보안] SSO(Single Sign-On) 구현 2 - OAuth 2.0(Open Authorization 2.0) (0) | 2023.02.14 |
[보안] SSO(Single Sign-On) - 하나의 인증 시스템에서 여러 서비스 지원하기 (0) | 2023.02.14 |
블로그의 정보
Sugar
Sugar0810