SSO
Single Sign On 서비스를 이용함으로써 유저는 여러번 로그인 처리를 할 필요없이, 한 번의 인증으로 여러 리소스에 접근할 수 있기 때문에 편리하다.
하지만 반대로 말하면 한 번 인증정보를 해킹당하게 되면 모든 리소스의 접근을 허용하는 꼴이 되고 만다.
이번 포스팅에서는 SSO의 종류들과 특징들에 대해서 정리했다.
LDAP
LDAP은 Light Directory Access Protocol의 약자로 디렉토리 서비스들은 이 프로토콜을 기본으로하여 서비스를 제공한다.
디렉토리 서비스란 하나의 집중된 관리 시스템에서 한 조직의 모든 subject와 object의 정보를 관리하는 것을 말한다.
대표적인 예로는 마이크로소프트의 Active Directory Domain Service를 들 수 있다. 관리 시스템의 디렉토리안에 조직의 다양한 정보들이 놓여있다.
인증을 통해서 접근을 하더라도 권한에 따라 열람이 가능한 정보들이 달라진다.
PKI (Public Key Infrastructure)도 디지털 인증서를 전송할 때 LDAP 프로토콜은 이용한다.
Kerberos
티켓 서비스를 이용하여 인증하는 메커니즘. Kerberos도 SSO을 제공한다.
티켓을 이용한 인증 방법에는 몇가지 기능들이 존재한다.
- KDC (Key Distribution Center): 인증 서비스를 담당하는 신뢰받는 제3자. 모든 클라이언트와 서버는 KDC에 등록되어 관리된다. 인증에는 대칭키 (AES)를 이용한다.
- Kerberos Authentication Server: KDC의 ticket granting service(TGS)와 authentication service(AS)를 제공하는 서버.
- Ticket-Granting Ticket(TGT): KDC에서 인증이 되면 그 증거로 이 티켓을 받게된다. 이 티켓으로 원하는 정보에 접근하기위한 티켓을 신청하게 된다 (또 다시). TGT는 대칭키, 유효시간, 유저의 IP정보를 암호화하여 포함하고 있다.
- Ticket 혹은 Service ticket. 인증을 마친 후 열람을 위한 티켓을 신청한 후 받게되는 티켓. 이 티켓이 있어야 정보에 접근이 가능하다.
Kerberos의 프로세스를 정리하면 다음과 같다.
아래는 이미지와는 별개의 설명.
로그인 과정
- 유저 ID / PW를 입력
- 유저이름을 암호화하여 KDC에 전송
- KDC가 데이터베이스를 조회하여 유저이름 확인
- KDC가 서버와 클라이언트에서 사용될 대칭키 생성 (유저의 해쉬된 비밀번호를 이용). 이때 만료기간이 들어있는 TGT 생성.
- TGT를 클라이언트에 전송.
- 클라이언트가 TGT 이용. 해쉬된 비밀번호를 사용해서 대칭키를 디크립트.
원하는 리소스에 접근하기 위한 티켓
- 클라이언트가 TGT를 KDC에 보내면서 원하는 리소스에 접근을 요청 (TGT가 곧 신분증 같은 것).
- KDC가 TGT를 확인 후 리소스에 대한 권한을 조회함
- 권한이 있으면 서비스 티켓을 발급 후 클라이언트에 전송.
- 클라이언트는 KDC에서 발급받은 이 티켓(허가증)을 리소스를 호스팅하고 있는 서버에 보여줌.
- 서버에서 서비스 티켓을 확인
- 확인되고 나면 서버와 클라이언트의 통신이 시작됨
즉 KDC가 서버와 클라이언트의 가운데 껴서 인증절차를 담당하는 이미지 (보증인 같은 존재).
Federated Identity Management (FIM)
지금까지는 한 조직의 SSO의 방법이었지만 FIM은 한 조직을 넘어 다른 조직과의 SSO를 제공한다.
하지만 이 경우 넘어야 할 산이 하나 있으니, 서로 다른 조직들간의 공통적으로 사용할 언어가 필요하다는 것이다.
조직들간에 사용하는 운영체제가 다를 수도 있기 때문이다.
이때 등장하는 것이 SAML (Security Assertion Markup Language). 연합된 조직들끼리 authentication, authorization정보를 교환할 때 SAML형식을 이용한다.
그밖에도 조직들 연합에서 사용하는 인증방법으로 OAuth, OpenID라는 것이 있는데 간단히 보면 다음과 같다.
- OAuth: 어떤 웹사이트에 접속할 때 트위터나 네이버, 카톡같이 이미 이용중인 다른 서비스로 인증하는 방법. 웹서핑하다보면 자주 보는 방식. Authorization에 이용.
- OpenID: 제 3자가 제공하는 credential을 가지고 여러 서비스에 인증으로 사용하는 방법. Authentication에 이용.