여러 도메인에 대한 단일 사인온 [닫힘]


110

우리 회사는 각 도메인에서 호스팅되는 하나의 웹 사이트로 여러 도메인을 설정했습니다. 이때 각 도메인에는 쿠키를 통해 수행되는 자체 인증이 있습니다.

한 도메인에 로그온 한 사람이 다른 도메인에 액세스해야하는 경우 사용자는 다른 도메인에있는 다른 웹 사이트에서 다른 자격 증명을 사용하여 다시 로그인해야합니다.

저는 이러한 번거 로움을 제거 할 수 있도록 SSO (Single Sign On)로 이동할 생각이었습니다. 나는 이와 관련하여 경험이 없기 때문에 이것이 어떻게 달성 될 수 있는지에 대한 아이디어에 감사드립니다.

감사.

편집 : 웹 사이트는 인터넷 (외부) 및 인트라넷 (회사 내에서 사용) 사이트가 혼합되어 있습니다.


이것은 OpenID 의 작업처럼 들리지만 로그인 도메인의 ID 만 허용합니다.
Neall

2
@Will이 질문은 SE 네트워크의이 웹 사이트에 대한 것이 아닐 수도 있지만 확실히 건설적 입니다.
Binar Web

@BinarWeb 닫기 이유는 2008 년 이후로 발전했습니다. 당시에는 이것이 가장 적합한 선택이었습니다.

답변:


91

여기에서 구현 한 SSO 솔루션은 다음과 같이 작동합니다.

  1. 로그인을 관리하는 master_login.php 스크립트가있는 마스터 도메인 login.mydomain.com이 있습니다.
  2. 각 클라이언트 도메인에는 client_login.php 스크립트가 있습니다.
  3. 모든 도메인에는 공유 사용자 세션 데이터베이스가 있습니다.
  4. 클라이언트 도메인에 사용자 로그인이 필요한 경우 마스터 도메인 (login.mydomain.com/master_login.php)으로 리디렉션됩니다. 사용자가 마스터에 로그인하지 않은 경우 사용자에게 인증을 요청합니다 (예 : 로그인 페이지 표시). 사용자가 인증되면 데이터베이스에 세션을 생성합니다. 사용자가 이미 인증 된 경우 데이터베이스에서 세션 ID를 찾습니다.
  5. 마스터 도메인은 세션 ID를 전달하여 클라이언트 도메인 (client.mydomain.com/client_login.php)으로 돌아갑니다.
  6. 클라이언트 도메인은 마스터에서 세션 ID를 저장하는 쿠키를 생성합니다. 클라이언트는 세션 ID를 사용하여 공유 데이터베이스를 쿼리하여 로그인 한 사용자를 찾을 수 있습니다.

노트:

  • 세션 ID는 RFC 4122의 알고리즘으로 생성 된 고유 한 전역 식별자입니다.
  • master_login.php는 화이트리스트의 도메인으로 만 리디렉션됩니다.
  • 마스터와 클라이언트는 서로 다른 최상위 도메인에있을 수 있습니다. 예 : client1.abc.com, client2.xyz.com, login.mydomain.com

이것은 좋은 솔루션 그롬처럼 보입니다. databse에 무엇을 저장합니까? (session_id, username, hashed_password)입니까?
Jon M

3
마스터 도메인 login.mydomain.com이 다운되는 경우 어떻게 처리합니까? 그 시점에서 로그인이 불가능합니까?
jjxtra 2011 년

3
코드 예제 또는 github 저장소를 생성 한 시체가 있습니까?
Joshua F. Rountree

이것은 거의 모든 SSO 프로토콜 (예 : SAML)이 지정하는 것이지만 재생 공격 등에 대해 더 많은 보안을 제공합니다.
cweiske 2012-06-19

2
사용자 데이터베이스를 공유하지 않으면 어떻게됩니까? 각 파트너 웹 앱에는 자체 사용자 기반이 있습니다. 우리는 이것을 어떻게 만납니 까?
stuckedoverflow

33

바퀴를 다시 발명하지 마십시오. JOSSO, OpenSSO, CAS, Shibboleth 등과 같은 많은 오픈 소스 교차 도메인 SSO 패키지가 있습니다. 전체 (IIS, AD)에서 Microsoft 기술을 사용하는 경우 대신 ADFS (Microsoft Federation)를 사용할 수 있습니다.


4
절대적으로-너무 많은 사람들이 자체 보안 솔루션을 롤링하여 재생, XSRF 또는 기타 공격에 취약하다는 것을 발견하는 것을

5
+1 보안 바퀴를 재발 명해서는 안됩니다.
Mark E. Haase

13
OpenSSO는 죽었고 JOSSO와 CAS는 JAVA 솔루션입니다. 그냥 FYI
OneHoopyFrood 2015-06-11

15

호스트 이름은 어떻게 다릅니 까?

이러한 호스트는 쿠키를 공유 할 수 있습니다.

  • mail.xyz.com
  • www.xyz.com
  • logon.xyz.com

그러나 다음은 할 수 없습니다.

  • abc.com
  • xyz.com
  • www.tre.com

전자의 경우 쿠키 기반 솔루션을 사용할 수 있습니다. GUID와 데이터베이스 세션 테이블을 생각해보십시오.


2

Active Directory를 사용하는 경우 각 앱이 인증에 AD를 사용하도록 할 수 있으며 로그인이 원활 할 수 있습니다.

그렇지 않으면 애플리케이션이 백그라운드에서 서로 통신 할 수있는 경우 세션 ID를 사용하고 하나의 앱에서 다른 모든 애플리케이션을 처리하는 ID 생성을 처리 할 수 ​​있습니다.


2
사용자가이 세션을 위해 처음 방문 할 때 domain1.com과 domain2.com 및 domain3.com에 사용자 이름과 암호를 입력해야하지 않습니까?
HaBo 2015-04-15
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.