SSO는 Single Sign-On의 약자로 한번의 로그인으로 여러개의 다른 도메인을 이용한다는 의미를 담고 있다.
예를들어, 로그인 검증은 A라는 곳에서 하고, B라는 곳에서는 A에서 검증된 로그인 정보라면 검증을 따로 하지 않게끔 하는 것이 SSO에 해당한다.
이런 SSO를 구현하기 위한 대표적인 방법으로 SAML, OAuth가 많이 사용된다.
SAML (Security Asserting Markup Language)
- (로그인) 인증/인가 정보를 담은 XML
- cross domain 상황, 다양한 플랫폼에 관계없이 표준적인 방법으로 SSO 구현이 가능하게 함
- 아래와 같이 3가지의 구성원이 존재
1) Service Provideer (SP) : 서비스 제공 주체
2) User
3) Identify Provider (IdP) : User 인증을 담당하는 주체
일반적인 시나리오는 다음과 같다.
IBM SSO 예제
- 사용자는 서비스 제공자(SP)에서 서비스를 요청합니다.
- SP는 요청을 통해 ID 제공자(IdP)에서 사용자 ID(SAML)를 요청합니다.
- 이 사용자가 이미 인증되지 않은 경우에는 IdP에서 사용자에게 로그인하도록 요청합니다.
- SP가 SAML을 가져옵니다.
- SP는 SAML 어설션을 기반으로 액세스 제어 의사결정을 합니다.
시나리오 1: SP-시작 요청 웹 SSO(SP에서 시작 중인 일반 사용자)
시나리오 2: IdP-시작 비요청 웹 SSO(IdP에서 시작 중인 일반 사용자)
시나리오 3: OpenID Connect 제공자 및 SAML 서비스 제공자
원본 링크 : https://www.ibm.com/docs/ko/was-liberty/base?topic=authentication-saml-20-web-browser-single-sign
네이버 Works
- NAVER WORKS 서비스 사용
사용자는 NAVER WORKS 서비스를 사용하기 위해 웹 브라우저에서 URL로 접근하거나, NAVER WORKS 앱 또는 드라이브 탐색기를 실행한다. - SAML Request 생성 후 전달(redirect)
NAVER WORKS에 로그인되어 있지 않은 경우, 고객사의 인증 시스템으로 SAML Request를 생성하여 전달한다. - SAML Request 검증 후 (고객사에 로그인되어 있지 않으면) 로그인 페이지 실행
고객사 인증 시스템에서는 SAML Request가 올바른 요청인지 확인하고, 고객사 시스템에 로그인되어 있지 않으면 사용자에게 자체 제작한 로그인 페이지를 제공한다. - 아이디/비밀번호 입력
사용자는 고객사 로그인 정책에 따라 아이디/비밀번호를 입력한다. - 고객사 인증 처리 후 SAML Response 생성
아이디/비밀번호로 고객사 시스템에 인증 처리를 하고, SAML Response를 생성한다.
만약, 고객사 시스템에 이미 로그인되어 있다면, 로그인 페이지 실행은 생략하고, 바로 SAML Response를 생성한다.
SAML Response는 NAVER WORKS에 미리 등록한 인증서로 전자서명을 해야 한다. - SAML Response 전달(redirect)
SAML Response를 NAVER WORKS에서 전달한 SAML Request의 ACS URL로 전달한다. - SAML Response 확인 후 NAVER WORKS 인증 토큰 발급
고객사가 미리 등록한 인증서로 SAML Response를 검증하여 인증 및 사용자 정보를 확인하고, NAVER WORKS용 인증 토큰을 발급한다.
원본 링크 : https://developers.worksmobile.com/kr/document/2001070201?lang=ko
'Backend Development > Spring boot' 카테고리의 다른 글
[Spring boot] Spring Security saml2.0 예제 분석 (spring-security-saml2-core) (0) | 2022.05.12 |
---|---|
[Spring boot] authenticationEntryPoint /auth (0) | 2022.05.12 |
[Spring boot] OAuth2 login(Google, Facebook, Naver, Kakao) (0) | 2022.03.15 |
[Spring boot] Spring Security 분석 - Session timeout 설정하기 (0) | 2022.03.14 |
[Spring boot] Spring Security 분석 - FilterSecurityInterceptor (Session 인증 기반) (0) | 2022.03.14 |