ETC

SSO(Single Sign-On)란 무엇인가?

Beekei 2021. 9. 10. 17:08
반응형

SSO(Single Sign-On)란?

한 번의(Single) 로그인 인증(Sign-On)으로 여러 개의 서비스를 추가적인 인증 없이 사용할 수 있는 기술

인증은 하나의 인증서버에서 수행하고, 그 인증 서버가 서비스를 각각 담당하는 서버에 인증 정보를 알려주는 방식

주로 다양한 서비스를 유사한 도메인 혹은 동일한 탑 레벨 도메인(TLD:Top Level Domain)을 서비스하는 엔터프라이즈 서비스 제공자들이 사용자에게 간편한 로그인을 제공하기 위해 사용한다.

SSO를 구현하기 위한 기술 요소는?

인증 서버를 구축하고, 이를 다양한 서비스들과 어떻게 인증 관련으로 연계할지 설계해야 한다.

인증을 성공적으로 마쳤다는 "증거"를 다른 서비스들이 어떻게 믿게 만들 것 인지에 대한 기술적 고민도 필요하다.


SSO의 장점

로그인 기능 로직을 한번만 수행함으로써 사용자에게 편리함 제공한다.

인증 기능을 모든 서비스마다 구현하지 않아도 되므로 개발 비용이 감소한다.

SSO의 단점

한 번의 인증으로 많은 정보를 제공하기 때문에 해킹의 피해가 늘어날 수 있다.

아이디의 접속 권한을 잃어버리면 모든 서비스를 사용할 수 없다.

각각의 서비스마다 보안 수준이 다르면 보안에 문제가 생길 수 있다.


SSO 서비스 다이어그램

위임(Delegation) 방식

SSO 에이전트가 인증을 대행하는 방식

대상 어플리케이션의 인증 방식을 변경하기 어려울 때 많이 사용

사용자의 인증 정보를 SSO 에이전트가 관리하며 로그인 대신 수행

전파(Propagation) 방식

SSO에서 인증을 수행, 토큰을 발급하고 전달하여 인증 수행

SSO에서 인증을 받아 대상 애플리케이션으로 전달할 토큰 생성

애플리케이션에서 SSO의 토큰 검증을 인증된 것으로 처리


인증 토큰의 내용과 유효성 검사 방법

유효한 토큰임을 확인하고 어떤 정보를 받을 수 있는지에 대한 디자인이 토큰의 핵심이다.

JWT(JSON Web Token)이 대표적인 기술이다.

  1. 인증 서버와 각 서비스들은 비밀키(Secret Key)를 공유한다.
  2. ID/PW로 정상적인 인증(DB조회)이 확인되면 토큰에 이메일, 이름, 유효 시간 등 사용자의 정보들을 넣어 생성한다.(Base64 Encoding)
  3. 토큰에 서명(signature) 부분을 추가(Secret Key 이용)하여 위 변조를 방지한다.
  4. HTTPS 보안 채널로 토큰 확인을 요청한다. 토큰이 유실되더라도 비밀키(Secret Key)가 없는 해커는 내용을 변조할 수 없다.
  5. 서비스에서 비밀키(Secret Key)로 토큰 변조 여보를 확인하고 토큰에 담겨 있는 사용자 정보를 확인 후, 인증 처리를 해준다.

장점과 단점

  • 장점은 가벼운 토큰을 사용하여 인증 처리 작업을 하는 서비스들이 부담을 갖지 않는 구조이고, 비밀키(Secret Key)없이는 토큰을 변조하지 못한다.
  • 단점은 아무리 HTTPS로 토큰을 보낸다고 하더라도, 중간자 공격 등으로 토큰을 훔친 해커는 토큰을 변조하지 않고 그대로 사용한다면, 로그인한 사용자와 동일한 서비스를 이용할 수 있다는 취약점이 있다. 위와 같은 단점 때문에 인증 과정에서 USER_AGENT 혹은 IP 주소를 확인하거나, 토큰이 유효하더라도 사용자의 IP 주소가 바뀐다면 다시 로그인을 하는 방법으로 보완책을 마련해야 한다.

 

예를들어 카카오의 서비스는 여러가지(카카오톡, 카카오T, 카카오맵 .. 등등) 존재하지만 하나의 계정으로 모든 서비스를 이용할 수 있다.

카카오톡과 카카오T, 카카오맵의 Database는 모두 같은 곳이 아닌데 어떻게 회원을 공유할 수 있나?

이와 같은 상호작용이 가능한 이유는 OAuth2.0 기반으로 상호작용하기 때문이다.

 

OAuth2(Open Authentication2)

OAuth2란? 다양한 플랫폼 환경에서 인증 및 권한 부여를 위한 표준 프로토콜 OAuth 방식이 등장하기 전에는 다른 서비스의 리소스를 가져오기 위해서는 다른 사이트의 ID와 PW를 직접 입력받아 저장

devbksheen.tistory.com

OAuth2.0 기반으로 나의 SSO인증서버와 각 소셜 계정의 정보를 공유할 수 도 있다.

 

Spring Security + OAuth2.0 소셜 인증 예제(Google, Naver, Kakao)

사이드 프로젝트를 만들며 소셜 로그인의 OAuth2.0 인증방식을 개발해보려고 한다. 인터넷에 소개되어있는 블로그 글들은 서칭 후 코딩해보고 정리하였다. 카카오, 네이버, 구글만 구현할것인데

devbksheen.tistory.com

 

반응형