SSO 구현 방법
** SSO와 세션 클러스터링 의미비교
Single Sign On(통합인증)을 "하나의 아이디/패스워드로 여러 어플리케이션에 접근할 수 있도록 관리하는
통합시스템"을 의미하는 개념적인 층위의 용어라고 할 때, 자바에서의 세션 클러스터링은 이를 구체화한 실제 방법론중의 하나, 즉 SSO의 하위개념으로 해석할 수 있을 듯 합니다.
또한, 자바 세션 클러스터링은 일반적 SSO의 기능인 사용자의 로그인 여부 판별과 고유 아이디 인증을 넘어서,단일 어플리케이션 상황에서와 마찬가지의 세션 스코프 유지를, 별개의 어플리케이션 또은 물리서버 사이에서도가능하도록 하는 데에 초점이 맞춰져 있는 논제같습니다.
즉, 다수의 어플리케이션간에 세션 스코프를 연결하고, 스코프에 저장되는 자바 오브젝트들의 상태를 유지할 수 있도록 보장하는 것입니다.
** A,B,C,D 서버가 있다고 할 때의 일반적인 SSO 구현방식
** 1.
사용자가 로그인을 성공할 경우 로그인 처리 페이지가 A,B,C,D 서버에 있는 각각의 loginok.jsp 페이지를
IFRAME을 통해 동시에 호출합니다.
이때, A,B,C,D 서버의 loginok.jsp 페이지는 해당 브라우저 사용자에 대해 로그인 처리를 하고, Requset에 담겨온 loginid를 이용해서 세션에 사용자정보를 담습니다. 로그아웃도 마찬가지로 처리합니다.
4개의 세션이 별개로 생기는 셈이지만, 이는 모두 공통된 하나의 브라우저에 대응하므로, 브라우저가
종료되면 동시에 소멸됩니다.
세션간의 연동(객체 전달같은)은 불가능하지만, 하나의 브라우저에 대해서 각각의 어플리케이션이
동일한 인증상태를 유지하고 있고, 각각의 세션에 저장된 사용자 정보가 동일한 것이라는 무결성을
획득할 수 있습니다.
** 2.
쿠키를 이용하는 방법 (가장 대중적, 메인 도메인이 같을 때)
로그인하면, 고유의 키를 만들어 쿠키에 저장합니다. 각각의 사이트에서는 쿠키에 담긴 이 키값의 여부로, 로그인 여부를 판단하고 세션을 생성하며 키값에 따른 고유한 사용자 정보를 뽑아와 세션에 저장합니다.
로그아웃시에는 쿠키를 지워줍니다.
** 3.
하나의 서버에서 인증처리를 전담하는 방법
로그인과 세션을 관리하는 A서버의 a페이지를, 통합인증이 필요한 모든 페이지에서 프레임으로 포함하고,
처리에 필요한 사용자정보를 여기에 요청, 응답받습니다. a페이지는 XMLHttpRequest를 이용 페이지 갱신없이 A서버의 다른 프로그램을 호출하고 응답을 얻어옵니다.
- 시나리오
1. 메인프레임에서 로그인프레임에 로그인여부 질의 top.loginFrame.getIsLogin();
2. 로그인 프레임의 a페이지는 응답받을 메인프레임의 함수를 이벤트로 등록후 서버측에 요청을 보냅니다.
sendRequest("./isLogin.jsp","data","top.mainFrame.isLogin");
3. 요청받은 서버는 세션을 참조하여 로그인 여부 판단, XMLHttpRequest에 응답합니다.
4. 서버에서의 응답값을 매개변수로 top.mainFrame.isLogin(isLogin); 이 실행됩니다.
일반적인 방법은 아닙니다.
** 4.
세션 클러스터링을 이용한 방법
고유한 키값을 쿠키나 기타 장소에 보관하고, 별개의 서버 프로그램과 소켓으로 통신하여 키값에 대해 배당된 컬렉션에서, 직렬화된 자바객체를 꺼내오거나 혹은 저장하며 그 상태를 유지시키는 방법입니다. 키값(연결)이 유지되는 한, 저장소내의 동일한 객체에 접근할 수 있다는 보장을 만들어줍니다. 즉, 통합 인증보다는, 인증 후의 데이터 공유에 촛점이 맞춰져 있는 것 같습니다.
** 5.
통합인증 솔루션 사용
출처 - http://devsik.tistory.com/53