IM연동에서 SSO로 변경하고 운영에 적용 - 정리

현재 프로젝트는 IM이라는 시스템을 통해서 프로젝트 시스템 DB와 연동을 하는식으로 회원을 관리하고 있었다. 운영까지 반영을 다 했는데 문제가 발생했다. 현재는 회원들의 비밀번호 IM시스템과 연동하지 않고 프로젝트 시스템에서 초기비밀번호로 세팅을 하는 형식이였다.

IM이란?

IM(Identify Mangement)은 시스템별로 분산된 사용자 계정정보를 IM으로 통합적으로 관리하여 IM에서 계정정보 변경시 실시간으로 각 시스템에 연동하여 동기화를 하는 솔루션이다.

왜 비밀번호는 IM시스템과 연동하지 않았는가?

일단 비밀번호를 DB로 연동한다는것 자체가 꺼림직했고, 현재 솔루션에서는 ID와 비밀번호를 합쳐서 암호화를 시키고 있어서 IM에서 사용하는 비밀번호 암호화를 맞추기가 힘들것으로 예상이 되어 초기비밀번호를 세팅을 한 후 사용자들이 해당 시스템에 들어왔을때 비밀번호를 변경하도록 설정했었는데 비밀번호 또한 동일하게 맞춰야한다고 메일이 왔다..!

솔루션에서 암호화를 해주고 있는곳을 커스터마이징 하려고 했지만 코어쪽 소스라서 내가 수정을 맘대로 할 수 없었다. 비밀번호를 맞추는 것은 불가능했고, 회의를 통해서 비밀번호를 동일하게 맞춰야 한다면 SSO를 통해서 로그인을 하기로 결정했다.

왜냐하면 SSO는 사용자의 ID와 PW를 몰라도 토큰으로 값을 확인하면 되니깐!

전체적인 SSO를 통한 로그인 절차

  1. 사용자가 대표홈페이지에 로그인(ID/PW)
  2. SSO에서 토큰생성
  3. 로그인한 사용자에게 토큰발행
  4. 사용자의 쿠키에 토큰 저장
  5. 다른 사이트에 접속(URL을 통해서)
  6. 현재 쿠키에 저장된 토큰으로 SSO에서 토큰 유효성 검증
  7. 검증결과가 true이면 다른 사이트에 접속한 DB에 로그인ID가 있는지 DB검증.
  8. 있다면 로그인 성공

이런식으로 로그인이 되는 과정을 생각했었지만 추가로 중간에 Agent에서 도메인별로 인증 작업을 해주고 있었다.

user --> agent --> sso

운영에 적용하면서 헤맸던 이유

SSO운영 WAS 방화벽을 뚫었고, ping으로 해당 IP가 뚫려있는지 확인까지 해봤는데 도메인으로는 안되는것을 발견했다.

문의를 해보니 IP로는 안되고 도메인으로만 된다고 했다. 왜 IP는 안되고 도메인 되는지 이해가 안돼서 물어보니,(어짜피 IP나 도메인이나 같다고 생각해서…) 해당 솔루션에서 그렇게 하도록 설정을 했었다고 답이 왔다.

hosts파일을 확인을 해보니, 운영에 반영할땐 hosts파일에 도메인을 설정해야하는데 설정을 안해서 좀 헤맸다.

hosts파일은 나중에 다시 정리를 해보겠다.
(이번에 hosts파일에 대해서 처음 들어봤고 해당ip에 도메인을 hosts파일에 처음 추가해봤다.)

SSO란?

Single Sign-On의 약자로 여러 개의 사이트에서 한번의 로그인으로 여러가지 다른 사이트들을 자동적으로 접속하여 이용하는 방법이다. 일반적으로 서로 다른 시스템 및 사이트에서 각각의 사용자 정보를 관리하게 되는데, 필요에 따라서 사용자 정보를 연동하여 사용해야 하는 경우도 생기게 된다. 이 때, 하나의 사용자 정보를 기반으로 여러 시스템을 하나의 통합 인증을 사용하게 하는 것이다. 즉 하나의 시스템에서 인증을 할 경우 타 시스템에서는 인증 정보가 있는지 확인하고 있으면, 로그인 처리를 하도록 하고, 없는 경우, 다시 통합 인증을 할 수 있도록 한다.

즉, 하나의 아이디 및 패스워드를 통해 여러 시스템에 접근할 수 있는 통합 로그인(인증) 솔루션

쿠키과 세션 대해서 다시 한번 정리

쿠키란?

웹사이트에 방문할 경우 그 사이트에서 사용하고 있는 서버에서 사용자의 컴퓨터에 저장하는 작은 기록 정보, HTTP에서 클라이언트의 상태정보를 클라이언트PC에 저장했다가 필요 시 정보를 참조하거나 재사용할 수 있다.

세션이란?

쿠키와 세션은 비슷한 역할을 하며, 동작 원리도 비슷하다. 그 이유는 세션도 결국 쿠키를 사용하기 때문이다. 큰 차이점은 사용자의 정보가 저장되는 위치이다. 쿠키는 서버의 자원을 전혀 사용하지 않으며, 세션은 서버의 자원을 사용한다. 세션은 쿠키를 이용해서 session-id만 저장하고 그것으로 구분하여 서버에서 처리하기 때문에 비교적 보안성이 높다.

쿠키

- 방문 사이트에서 로그인 시, "아이디와 비밀번호를 저장하시겠습니까?"
- 팝업창을 통해 "오늘 이 창을 다시 보지 않기" 체크

세션

- 화면을 이동해도 로그인이 풀리지 않고 로그아웃하기 전까지 유지