IM연동에서 SSO로 변경하고 운영에 적용 - 정리
현재 프로젝트는 IM이라는 시스템을 통해서 프로젝트 시스템 DB와 연동을 하는식으로 회원을 관리하고 있었다. 운영까지 반영을 다 했는데 문제가 발생했다. 현재는 회원들의 비밀번호 IM시스템과 연동하지 않고 프로젝트 시스템에서 초기비밀번호로 세팅을 하는 형식이였다.
IM이란?
IM(Identify Mangement)은 시스템별로 분산된 사용자 계정정보를 IM으로 통합적으로 관리하여 IM에서 계정정보 변경시 실시간으로 각 시스템에 연동하여 동기화를 하는 솔루션이다.
왜 비밀번호는 IM시스템과 연동하지 않았는가?
일단 비밀번호를 DB로 연동한다는것 자체가 꺼림직했고, 현재 솔루션에서는 ID와 비밀번호를 합쳐서 암호화를 시키고 있어서 IM에서 사용하는 비밀번호 암호화를 맞추기가 힘들것으로 예상이 되어 초기비밀번호를 세팅을 한 후 사용자들이 해당 시스템에 들어왔을때 비밀번호를 변경하도록 설정했었는데 비밀번호 또한 동일하게 맞춰야한다고 메일이 왔다..!
솔루션에서 암호화를 해주고 있는곳을 커스터마이징 하려고 했지만 코어쪽 소스라서 내가 수정을 맘대로 할 수 없었다. 비밀번호를 맞추는 것은 불가능했고, 회의를 통해서 비밀번호를 동일하게 맞춰야 한다면 SSO를 통해서 로그인을 하기로 결정했다.
왜냐하면 SSO는 사용자의 ID와 PW를 몰라도 토큰으로 값을 확인하면 되니깐!
전체적인 SSO를 통한 로그인 절차
- 사용자가 대표홈페이지에 로그인(ID/PW)
- SSO에서 토큰생성
- 로그인한 사용자에게 토큰발행
- 사용자의 쿠키에 토큰 저장
- 다른 사이트에 접속(URL을 통해서)
- 현재 쿠키에 저장된 토큰으로 SSO에서 토큰 유효성 검증
- 검증결과가 true이면 다른 사이트에 접속한 DB에 로그인ID가 있는지 DB검증.
- 있다면 로그인 성공
이런식으로 로그인이 되는 과정을 생각했었지만 추가로 중간에 Agent에서 도메인별로 인증 작업을 해주고 있었다.
user --> agent --> sso
운영에 적용하면서 헤맸던 이유
SSO운영 WAS 방화벽을 뚫었고, ping으로 해당 IP가 뚫려있는지 확인까지 해봤는데 도메인으로는 안되는것을 발견했다.
문의를 해보니 IP로는 안되고 도메인으로만 된다고 했다. 왜 IP는 안되고 도메인 되는지 이해가 안돼서 물어보니,(어짜피 IP나 도메인이나 같다고 생각해서…) 해당 솔루션에서 그렇게 하도록 설정을 했었다고 답이 왔다.
hosts파일을 확인을 해보니, 운영에 반영할땐 hosts파일에 도메인을 설정해야하는데 설정을 안해서 좀 헤맸다.
hosts파일은 나중에 다시 정리를 해보겠다.
(이번에 hosts파일에 대해서 처음 들어봤고 해당ip에 도메인을 hosts파일에 처음 추가해봤다.)
SSO란?
Single Sign-On의 약자로 여러 개의 사이트에서 한번의 로그인으로 여러가지 다른 사이트들을 자동적으로 접속하여 이용하는 방법이다. 일반적으로 서로 다른 시스템 및 사이트에서 각각의 사용자 정보를 관리하게 되는데, 필요에 따라서 사용자 정보를 연동하여 사용해야 하는 경우도 생기게 된다. 이 때, 하나의 사용자 정보를 기반으로 여러 시스템을 하나의 통합 인증을 사용하게 하는 것이다. 즉 하나의 시스템에서 인증을 할 경우 타 시스템에서는 인증 정보가 있는지 확인하고 있으면, 로그인 처리를 하도록 하고, 없는 경우, 다시 통합 인증을 할 수 있도록 한다.
즉, 하나의 아이디 및 패스워드를 통해 여러 시스템에 접근할 수 있는 통합 로그인(인증) 솔루션
Cookie를 이용한 SSO 구현 시, Cookie 보안 방법
- 데이터 기밀 유지(Data Confidentiality)
- 토큰은 주요 암호 알고리즘(AES, SEED)과 128bit 이상의 키로 암호화 되어야 한다.
쿠키과 세션 대해서 다시 한번 정리
쿠키란?
웹사이트에 방문할 경우 그 사이트에서 사용하고 있는 서버에서 사용자의 컴퓨터에 저장하는 작은 기록 정보, HTTP에서 클라이언트의 상태정보를 클라이언트PC에 저장했다가 필요 시 정보를 참조하거나 재사용할 수 있다.
세션이란?
쿠키와 세션은 비슷한 역할을 하며, 동작 원리도 비슷하다. 그 이유는 세션도 결국 쿠키를 사용하기 때문이다. 큰 차이점은 사용자의 정보가 저장되는 위치이다. 쿠키는 서버의 자원을 전혀 사용하지 않으며, 세션은 서버의 자원을 사용한다. 세션은 쿠키를 이용해서 session-id만 저장하고 그것으로 구분하여 서버에서 처리하기 때문에 비교적 보안성이 높다.
쿠키
- 방문 사이트에서 로그인 시, "아이디와 비밀번호를 저장하시겠습니까?"
- 팝업창을 통해 "오늘 이 창을 다시 보지 않기" 체크
세션
- 화면을 이동해도 로그인이 풀리지 않고 로그아웃하기 전까지 유지