SSO를 구성(Configuration)하는 것들
이전 글에서 SSO 를 조금이나마 이해하기 쉽도록 설명했는데, 이번 글을 보고 더 정확히 이해할 수 있을 것이다
우선 몇 가지 용어를 써보도록 하자. 막 생각나는 대로 써봤다
- SSO (Single Sign On)
- OAUTH (Open Authorization)
- SAML(Security Assertion Markup Language)
- OpenID Connect
- ADFS (Active Directory Federation Services)
- LDAP (Lightweight Directory Access Protocol)
- Azure AD (Azure Active Directory)
IT 쪽에서 인증 쪽을 검색하다 보면 항상 저들 중에 한 단어는 꼭 볼 수 있을 것이다
돌아가서 SSO 용어를 다시 정리하자
Single sign-on (SSO) is an authentication scheme
SSO 는 인증 체계이다
SSO 는프로토콜(약속, 규칙) 이 아니다(SSO is not a protocol)
SSO 는 서비스의 개념 이다 (고급 용어 - high-level term)
기술의 표현이 아니고 서비스 용어이다
이해가 쉽도록 아래와 같이 표현 해보도록 한다
Service | SSO | Network | 요식업(!?) | 개발자(??) |
Protocol | OAUTH | HTTP / HTTPS | 손님 안내 (!) | 출/퇴근 |
Protocol | SAML | TCP / UDP | 재료 준비 (!) | 카페인 주입 |
Protocol | OIDC | IP / ICMP | 마감 처리 (!) | 개발/코딩/삽질 |
이해가 조금 더 잘 되려나??
**요식업에 대한 프로토콜은 저럴 수도 있고, 아닐 수도 있음을 미리 말한다 ㅎㅎ
***개발자 서비스는 웃자고 넣은거다 다큐로 받아들이지 말자 (사실 - 적어도 내게는 - 카페인 주입 프로토콜은 필수다)
자!! 이제 이해도 어느 정도 되었고, 우리는 좀 더 고오오오오급 지게 말할 수 있다 라고 생각한다면 다음 그림과 글들을 더 보도록 하자
그림에서도 보이듯이, 거대한 목성 같은 FIM(연합 ID 관리)이 존재하고, 그 안에서 위성들 같은 SSO가 존재하고 있다. 또 같지만 다른 행성인 SSO(Same Sign On)가 존재하고, 이놈의 IT 세상은 도대체가 뭐라고 하는지 1도 모르겠다 라지만, 적어도 아~ 이런 느낌이구나 정도만 기억해두면 좋을 그림이라고 생각한다
(**자세한 것은 아래 참조(reference) 링크를 확인하기 바란다)
잠시라도 충격에서 벗어나 또 여러 가지를 설명해야 하는 설명충으로 빙의 해보려 한다
우선적으로 Single Sign-On 과 Same Sign-On 둘 차이는 분명하다.
가장 중요한 포인트는 인증을 수행하는 개체(Entity)간의 신뢰 관계를 포함하는지 여부 이다
it doesn’t involve any trust relationship between the entities that are doing the authentication.
에 대한 내용이다. 이 말은 Same Sign-On 은 인증이 필요할 때 로그인 (유저아이디/비밀번호)을 하는 것을 단순하게 전달만 하는 것에 그친다. 우리가 이미 알고 있는 진짜 SSO 의 뜻이 아니게 된다. 하지만 뭔가 이렇게 쓰면서도 이해가 안되고, 더 깊은 수렁에 빠지는 느낌이다. (더이상 자세히 정확히 설명할 자신이 없다)
이럴 때는 빨리 다른 이야기로 넘어간다.
SSO Configurations (구성)은 여러 가지로 가능하다
- Kerberos-based
- Smart-card-based
- SAML-based
- .....
- .....
- 여전히 많은 기준이 생기고 있다
어?? 왜 OAuth 는 없는 것인가? OIDC는 SSO 구성이 아닌 것 인가??? 등등 많은 질문들이 생길 수가 있다
이런 저런 내용을 따질 필요 없이 SSO의 의미를 다시금 생각해보고, 어떤 기술을 사용해서 구현을 하게 된다면 그것이 SSO 와 다름이 없게 된다
물론 해당 기술이 보안적으로 검증 되었는지 여부는 이미 다수의 사람들이 많이 사용하는 개방형 표준 프로토콜(open standard protocol)을 사용해야함으로 자연스럽게 귀결 된다. 즉 우리가 많이 들어본 단어들 - OAUTH, ODIC, SAML 등등 이다
용어를 제대로 알기 위해 검색 했을 때, 블로그 같은 내용 전달 사이트에서 말하는 내용들을 살펴 보면 자세히 풀어서 설명한 경우는 많이 없었고, 당사자가 이미 이해한 상태에서 본인이 이해할 수 있도록 간략하게 적는 형태가 많았었다. 다른 사람에게 전달하는 형태로 글을 읽어보는 것들은 찾기가 힘들었다. 그래서 보통 그 용어를 정확히 이해하기 위해서 영어 문서를 찾아봐야 하는 형태가 되었는데, 한글로 제대로 설명 하는 곳들이 많지는 않기에 이렇게 자세히 남겨두면 좋을꺼라 생각한다
추가로 SSO Solutions (제품군) 을 만드는 회사들의 제품 (Cloud-based)
- AWS SSO
- Azure AD
- OKTA Identity Cloud
- Auth0
- Ping Identity
- Oracle Enterprise Single Sign-On
- IBM Authentication Solutions
- ....
- ....
중요한 것은 OKTA 주식이 많이 올랐다는 것이 아니라 SSO 정의를 명확하게 이해하고 있으면, 여러 가지 브랜드(회사)들의 용어가 나와도 흔들리지 않고, 중심을 잡고 이해를 하기가 쉬워진다.
이것은 마치 Front-end 개발자가 Javascript 를 배우면서 따라가는 로드맵(roadmap) 에 있던 수 많은 Library 및 Framework 들을 제대로 분류해서 아는게 중요한 것 처럼 말이다
- Package Manager : npm, yarn
- Build Tool (Module Bundler) : webpack, parcel, rollup
- Lint : prettier, ESLint
- Framework : react js (redux), angular (rxjs), vue js (vuex)
- Server-Side Rendering (SSR) : react next js, angular universal, vue nuxt js
- Testing Tool - mocha, chai, ava, jasmine
- TypeScript
인증 부분에도 Scheme / Protocol / (Company's) Solution 의 내용들을 분리해서 알 수 있게 되어야 할 것이다
- Scheme
- Protocol
- Solution