SSO(Single Sign On) 구현에 대해서 질문을 하셨는데, 까다로운 주제 중에 하나라고 생각됩니다. SSO 구현은 경우에 따라서 쉬울 수도 어려울 수도 있습니다.

  • 쿠키 VS 세션 : 쿠키나 세션 방식을 사용하는데 선호의 문제가 아닌, 환경의 문제를 먼저 따져봐야 합니다.
  • 만약, 같은 도메인을 사용하고 2차 도메인만 다르다면, 쿠키를 사용하여 SSO을 구현할 수 있습니다. 도메인 자체가 다르다면 쿠키를 사용할 수 없습니다.예를 들어, a.site.com b.site.com www.site.com 등은 쿠키를 공유할 수 있습니다. 하지만, www.siteA.comwww.siteB.com은 쿠키를 공유할 수 없습니다. 쿠키 설정할때는, 쿠키 Path를 루트로 잡아주시면 쿠키를 사용하여 인증작업을 진행할 수 있습니다.
  • 세션은 기본적으로 메모리상에 적재되기 때문에 사이트가 다른 경우 사용하기가 어렵습니다. 이럴 경우에는 세션 서버로 사용할 데이터베이스를 지정하여, 세션 정보를 공유하는 방법이 있습니다. 예를 들어 www.siteB.com?redirectUrl=리다이렉트경로&sessionId=ab0dmdbd0929d....에서 SessionID를 데이터베이스에서 검색해 있을 경우 인증해 주는 것입니다. 이때 문제는 A 사이트에서 발행한 SessionID의 소유자가 B 서버에서 인증하는 것이 안전한지 여부를 고려해야 합니다.
  • 쿠키, 세션 둘 다 사용할 수 없다면, 마지막으로 인증토큰을 만드는 방법입니다. A사이트에서 B사이트에 인증할때, http://www.siteB.com/Login.aspx?redirectUrl=리다이렉트경로&token=ab0dmdbd0929d.... 와 같은 식으로 넘겨주고 SiteB에서는 token 정보를 복호화하여 인증을 해줍니다. 여기서 token 값은 암호화된 값으로 사용자아이디,토큰유효시간 등의 사용자를 인증할 수 있는 정보를 담고 있어야 합니다. 그리고 A 사이트와 B 사이트에 이 암호를 암호/복호화 키값을 공유해야 합니다. 예전에 SAP 포털에 작업했을때, SAP 포털에서 인트라넷 SSO 작업을 수행할 때, SAP에서 발행하는 인증토큰을 복호화하여 사용자 정보를 인증해주는 SSO 작업을 수행해 준 적이 있습니다.
  • 앞에서 말씀드린 세션이나 인증토큰을 사용한 경우에 세션이나 토큰의 유효시간을 길게 할 경우에 보안상의 문제가 될 가능성이 존재합니다. 사이트 A에서 사이트 B로 이동할 때 넘겨주는 SessionID나 인증토큰 정보를 해커가 그대로 사용할 경우에 사용자 가장이 가능하기 때문입니다.
  • 지금까지 SSO를 간단하게 구현하는 몇가지 방법을 말씀드렸습니다. 넓은 관점에서는 앞에서 말씀드린 세션이나 인증토큰을 사용하는 방법은 유사합니다. 세션은 데이터베이스에서 정보를 찾고 인증토큰은 토큰 자체에 인증정보가 포한된다는 차이점이 있을 뿐입니다



출처 - http://blog.naver.com/PostView.nhn?blogId=lawyerle&logNo=70104126015



'Security > SSO' 카테고리의 다른 글

sso - 인증 방식  (0) 2013.06.15
josso - 2.3.0 설치 in fedora  (0) 2013.06.14
josso - josso 1 설치 가이드  (0) 2013.06.12
sso - 구현 방법, 쿠키 연동  (0) 2013.06.10
josso - 관련 자료 소개  (0) 2013.06.10
Posted by linuxism
,


SSO의 종류

요약 :

SSO 에이전트가 대행해주는 Delegation(인증 대행) 방식과

SSO 시스템과 신뢰관계를 토대로 사용자를 인증한 사실을 전달받아 SSO를 구현하는 Propagation(인증정보 전달) 방식으로 구분된다.

 propagation 방식중 같은 도메인내에 있다면 one cookie domain sso를 이용하면 손쉽게 sso를 구현할수 있고 이때는 보안을 위해 128bit암호화 알고리즘이나 유효시간 제한등의 방법을 사용한다.


내용 :

일반적으로 사용되는 SSO 시스템은 두 가지 모델로 구분된다. SSO 대상 애플리케이션에서 사용되는 사용자 인증 방법을 별도의 SSO 에이전트가 대행해주는 Delegation(인증 대행) 방식과 SSO 시스템과 신뢰관계를 토대로 사용자를 인증한 사실을 전달받아 SSO를 구현하는 Propagation(인증정보 전달) 방식으로 구분된다.

<그림 1> SSO Delegation Model

△Delegation 방식: 대상 애플리케이션의 인증 방식을 변경하기 어려울 때 많이 사용된다. 대상 애플리케이션의 인증 방식을 전혀 변경하지 않고, 사용자의 대상 애플리케이션 인증 정보를 에이전트가 관리해 사용자 대신 로그온 해주는 방식이다. 즉 Target Server 1을 로그온 할 때 User1이 alice/alice라는 ID/ PWD가 필요하다면, 에이전트가 이 정보를 가지고 있고, User1이 Target Service 1에 접근할 때 에이전트가 대신 alice/alice ID/PWD 정보를 전달해서 로그온 시켜준다. △Propagation 방식: 통합 인증을 수행하는 곳에서 인증을 받아 대상 애플리케이션으로 전달할 토큰(Token)을 발급 받는다. 대상 애플리케이션에 사용자가 접근할 때 토큰을 자동으로 전달해 대상 애플리케이션이 사용자를 확인할 수 있도록 하는 방식이다. 웹 환경에서는 쿠키(Cookie)라는 기술을 이용해 토큰을 자동으로 대상 애플리케이션에 전달할 수 있다. 이러한 웹 환경의 이점으로 웹 환경에서의 SSO는 대부분 이 모델을 채택하고 있다.

<그림 2> SSO Propagation Model

△Delegation & Propagation 방식: 웹 환경이라고 하더라도 Propagation 방식이 모두 적용될 수는 없다. 특히 웹 애플리케이션의 변경이 전혀 불가능하고 사용자 통합이 어려운 경우 Delegation 방식을 사용하게 된다. 또한 대상 애플리케이션들이 많이 있고 애플리케이션의 특성들이 다양한 경우 각 애플리케이션에 Delegation 방식과 Propagation 방식을 혼용해서 전체 시스템의 SSO을 구성한다.

△Web 기반 One Cookie Domain SSO: SSO 대상 서비스와 응용 애플리케이션들이 하나의 Cookie Domain안에 존재할 때 사용된다. 일반적인 기업 내부의 컴퓨팅 환경이다. 통합인증을 받은 사용자는 토큰을 발급받게 되고, 이 토큰은 Cookie Domain에 Cookie로 설정되어 Cookie Domain 내의 다른 서비스로 접근할 때 자동으로 토큰을 서비스에 제공하게 된다. 서비스에서 동작되는 SSO 에이전트는 토큰으로부터 사용자 신원을 확인하고 요청된 자원에 대한 접근을 허가 해준다.

Cookie를 통한 SSO구현시 Cookie 보안 방법

토큰은 쿠키를 통해 전달되므로 외부에 노출되는 정보이다. 완벽한 보안을 위해서는 토큰이 네트워크에서 노출되어서는 안되지만, 비용 및 관리상의 이유로 허용되고 있다. 하지만 토큰을 통해 토큰이 포함하고 있는 정보까지 외부에 노출하는 것은 심각한 결함을 제공한다. 토큰의 네트워크 구간에서의 정보 노출 및 위·변조를 방지하기 위해 다음과 같은 보안기술이 사용된다.

△Data Confidentiality: 토큰은 주요 암호 알고리즘(AES, SEED)과 128bit 이상의 키로 암호화돼 보호되어야 한다. △Data Integrity: 토큰은 MAC

(Message Authentication Code) 등을 포함해 데이터의 무결성을 보장해야 한다. △Replay Attack Protection: 토큰은 사용자와 대상 애플리케이션 사이에 전달되는 인증 정보이다. 일반적으로 토큰은 네트워크에 노출되며, 노출된 토큰을 사용해 다른 사용자가 인증을 받고 들어올 수 있다(Replay Attack). 특히 웹 환경에서 이러한 문제점이 중요한 이슈로 등장하고 있다. 이러한 문제점을 근본적으로 해결하기 위해서는 토큰을 네트워크에 노출시키지 않아야 한다.
토큰을 네트워크에 노출시키지 않기 위해서는 항상 사용자와 대상 애플리케이션 사이에 암호 채널을 형성해야 하며, 이 채널을 통해 토큰을 전달해야 한다. 그러나 SSL과 같은 채널 암호를 사용하는 데에는 매우 많은 비용이 요구되어 실제로 많이 사용되고 있지는 않다.
SSL과 같은 암호채널을 사용하지 않으면서 Replay Attack이 발생할 수 있는 상황을 줄일 수 있도록 다음과 같은 보안 기술들이 사용된다.

△사용자 주소 제한: 토큰이 발행될 때 접속한 사용자 주소 정보를 토큰 내부나 토큰을 발행한 서버에서 기억함으르써 Token이 제출된 사용자 주소와 최초 발행시 기억된 주소를 비교하여 접속한 곳 이외에서의 접속을 제한할 수 있다. 사용자 주소가 업무진행 중에 자주 변경되지 않는 시스템일 경우 유효하다. 예를 들어 회사내의 인터넷 환경일 경우 사용될 수 있다. 인터넷 환경의 경우에는 사용자 주소가 특정 범위에서 자주 바뀔 수 있는 환경도 있기 때문에 불특정 다수를 위한 일반적인 인터넷 서비스에 사용하기에는 부적합하다.

△유효시간 제한: 토큰의 유효시간을 매우 짧게 줌으로써 Replay Attack에 사용될 수 있는 시간을 제한한다. 유효시간내에 임계시간(예: 유효시간의 1/2)을 넘으면 자동으로 토큰을 재 발행하여 사용자는 의식하지 못하고 서비스를 계속 사용하게 한다. 지금까지 사용자가 각 애플리케이션별로 별도의 인증을 받지 않고, 한번의 통합 인증만으로 각 애플리케이션들을 사용할 수 있도록 하는 SSO 기술에 대해 살펴보았다. 대상 애플리케이션의 수정을 최소화할 수 있는 Delegation 모델과 토큰을 생성해 통합 인증 서비스를 제공하는 Propagation 모델 그리고 양자의 장점을 조합한 Delegation & Propagation 방식을 이해한다면 현재 도입 대상 기업의 IT 인프라와 진행중인 서비스 및 애플리케이션의 특성에 적합한 EAM 시스템 도입을 결정하는데 도움이 될 것이다.

 

 URL암호화를 통한 SSO구현

가장 큰 분류로는 아마도 sso 해야할 사이트가 같은 도메인 그룹인지 여부를 파악해야 할것 같네요.
예를 들어서 aaa.xxx.com, bbb.xxx.com 은 둘다 xxx.com 도메인 그룹안에 포함되어 있기 때문에 이 경우 쿠키를 이용한 sso가 가능합니다.
이 같은 도메인 그룹의 경우 굳이 세션을 이용하지 않고 쿠키를 이용하는 이유는 aaa.xxx.com은 PHP로 제작된 사이트 bbb.xxx.com은 ASP로제작된 사이트..즉 각 서버의 플랫폼이 틀리다면 세션 공유가 안되는것은 잘 아실겁니다. 그래서 플랫폼에 상관없이 클라이언트에 의존되는 쿠키를 이용하게 됩니다.

반면에 서로 도메인이 틀리다면 어쩔수 없이 url로 암호화 시켜서 이리저리 주고 받으면서 sso인증 시켜줘야 합니다.

쿠키를 이용한 방법이나 url로 이용한 방법이나 서로 원리는 똑같습니다. 그래서 그나마 설명하기 쉬운 url을 이용한 방법으로 말씀드리겠습니다. 아무래도 예제를드는것이 간단할듯 -_-...

A사이트 : test.com
B사이트 : abcd.com

aaa란 유저가 A사이트에서 로그인후에 B사이트로 가게 되면 B사이트가 자동으로 로그인 되어있게 하는거잖아요.
(물론 aaa란 계정이A사이트에도 있고 B사이트에도 있어야겠지요)

이럴때 단순히 B사이이트로 자동 로그인 시키고자 한다면 아무래도 아이디/비밀번호가 필요할겁니다. 아래와 같이요

abcd.com/logijn.asp?id=aaa&pwd=1234

헌데 이 id=aaa&pwd=1234 이 부분이 url에 노출되면 상당히 위험하지요 그래서 이 부분을 암호화 시키는 겁니다. 제 홈피에 몇가지 암호화 하는 구문들이 있는데 대부분 URL 정보 노출시키고 싶지 않아서 암호화 시킨다고 적어둔 것들입니다.(제가적은것은 아니고 여기저기 돌아다니다가 -_-.. )

그래서 암호화 시키면 아래처럼 url 변하겠지요

abcd.com?/login.asp?암호된값=dpZe-==234s

요렇게 변할겁니다..(대충 적은것임 -_-) 요 login.asp 페이지에서는 아래와 같이

암호된값 = Request("암호된값")
디코딩된값 = 디코딩(암호된값)    ' 암호된값을 디코딩 함수에 넣어서 암호된값을 id=aaa&pwd=1234 형식으로 보이도록 한다.

id=aaa&pwd=1234 이 값들 보이면 다 끝난거지요..요것 그냥 split로 이리저리 분할하면 id는 aaa , pwd=1234란 값 쉽게 취할수 있습니다.


음..대충 이해가 가셨는지..위에서 설명한 암호화 함수는 그냥 일반 하나의 함수처럼 얘기했는지 제 홈피에 있는 암호화 함수는 암호할때/풀때 어떤 키값으로 풀어야 합니다. 즉 암호할때 a란 키값을 통해서 암호 시켰다면 풀때도 a란 키값으로 암호를 풀어야 합니다. 좀 더 보안상 좋지요..

암호화 방식도 좋지만 ID/pass 가 노출된다는 단점이 있기때문에, 서버가 다를경우 인증키를 생성하는 function 을
만들어서 각 서버에서 생성된 인증키를 비교하는 방식도 괜찮은 방식이겠죠.

쿠키를 이용한 방법은 잠깐 설명드리자만 aaa.com사이트에 로그인 하면 쿠키를 던져둡니다. 던진 값은 2개 입니다 하나는 키값 다른 하다는 암호화된 값 그래서 abcd.com 으로 접속하면 일단  그 abcd.com의 login.asp 페이지에서 던져진 쿠키가 있는지 검사합니다. 그래서 있다면 그 던져진 값들을 이용해서 암호푸는 겁니다. 그리곤 로그인 시키는 거지요. 



참고 URL


정리하면
SSO 는 Delegation 방식(솔루션 존재.)과 Propagation 방식(직접구현)이 있고.
Propagation 방식에는 Cookie 를 이용하는 방법과 URL 인증 방법 이 있겠다.
대부분의 SSO 는 Propagation 방식을 많이 사용하는듯하다!!











'Security > SSO' 카테고리의 다른 글

sso - 인증 방식  (0) 2013.06.15
josso - 2.3.0 설치 in fedora  (0) 2013.06.14
josso - josso 1 설치 가이드  (0) 2013.06.12
sso - 구현 방법 모색  (0) 2013.06.10
josso - 관련 자료 소개  (0) 2013.06.10
Posted by linuxism
,


예전에 SSO 한번 손대보다가(openSAML이용) 자동 인증여부 체크 루틴이 없어서 완료 못했었는데.. JOSSO로 하니 되네요..

저도 현재 삽질 중이니 궁금하신 사항 있으시면 같이 공유해요.

drods@naver.com으로 멜 주세요


관련 자료

1. JOSSO

  Java와 PHP를 위한 SSO 모듈인 JOSS(Java Open Single Sign-On)를 정리한다. JOSSO는 J2EE와 Spring 기반의 SSO 솔루션 이다.

 

  - 한글 번역 홈 http://www.jopenbusiness.com/mediawiki/index.php/JOSSO

  - 원 오픈 소스 http://www.josso.org

  - 다운로드 사이트 http://sourceforge.net/projects/josso/files/

       http://downloads.sourceforge.net/project/josso/JOSSO/JOSSO-1.8.1/josso-1.8.1.zip?use_mirror=jaist

 

 ※ 설정관련 참고 블로그

  http://blog.naver.com/joycestudy?Redirect=Log&logNo=100086695314

  http://www.jopenbusiness.com/tc/oss/84

  http://openlamp.co.kr/101

  http://run4dream.tistory.com/tag/JOSSO

 

2. OPEN SAML 관련
 SAML은 웹 브라우저에서의 SSO문제를 해결하기 위해서 OASIS의 연구결과로 탄생함.

 도메인간의 SSO 구현을 위한 방식은 통제할 수 없는 외부 환경을 포함하므로 통일된 하나의 표준방식이 필요하게 되었고
 SAML은 이러한 도메인간의 SSO구현을 가능하게하는 XML 표준이다.

  - 한글 메뉴얼  http://shinji.springnote.com/pages/486676


 ※ SAML을 이용한 SSO Service의 구현

  http://docs.google.com/Doc?id=dcxqxct2_4dsh8w4dt

  https://sites.google.com/a/paygate.net/paygate-open-dev/SAML-SSO



최종 수정일 : 2009-11-12



출처 - http://blog.naver.com/PostView.nhn?blogId=drods&logNo=90072103391







'Security > SSO' 카테고리의 다른 글

sso - 인증 방식  (0) 2013.06.15
josso - 2.3.0 설치 in fedora  (0) 2013.06.14
josso - josso 1 설치 가이드  (0) 2013.06.12
sso - 구현 방법 모색  (0) 2013.06.10
sso - 구현 방법, 쿠키 연동  (0) 2013.06.10
Posted by linuxism
,