우리 회사는 각 도메인에서 호스팅되는 하나의 웹 사이트로 여러 도메인을 설정했습니다. 이때 각 도메인에는 쿠키를 통해 수행되는 자체 인증이 있습니다.
한 도메인에 로그온 한 사람이 다른 도메인에 액세스해야하는 경우 사용자는 다른 도메인에있는 다른 웹 사이트에서 다른 자격 증명을 사용하여 다시 로그인해야합니다.
저는 이러한 번거 로움을 제거 할 수 있도록 SSO (Single Sign On)로 이동할 생각이었습니다. 나는 이와 관련하여 경험이 없기 때문에 이것이 어떻게 달성 될 수 있는지에 대한 아이디어에 감사드립니다.
감사.
편집 :
웹 사이트는 인터넷 (외부) 및 인트라넷 (회사 내에서 사용) 사이트가 혼합되어 있습니다.
답변
여기에서 구현 한 SSO 솔루션은 다음과 같이 작동합니다.
- 로그인을 관리하는 master_login.php 스크립트가있는 마스터 도메인 login.mydomain.com이 있습니다.
- 각 클라이언트 도메인에는 client_login.php 스크립트가 있습니다.
- 모든 도메인에는 공유 사용자 세션 데이터베이스가 있습니다.
- 클라이언트 도메인에 사용자 로그인이 필요한 경우 마스터 도메인 (login.mydomain.com/master_login.php)으로 리디렉션됩니다. 사용자가 마스터에 로그인하지 않은 경우 사용자에게 인증을 요청합니다 (예 : 로그인 페이지 표시). 사용자가 인증되면 데이터베이스에 세션을 생성합니다. 사용자가 이미 인증 된 경우 데이터베이스에서 세션 ID를 찾습니다.
- 마스터 도메인은 세션 ID를 전달하여 클라이언트 도메인 (client.mydomain.com/client_login.php)으로 돌아갑니다.
- 클라이언트 도메인은 마스터에서 세션 ID를 저장하는 쿠키를 생성합니다. 클라이언트는 세션 ID를 사용하여 공유 데이터베이스를 쿼리하여 로그인 한 사용자를 찾을 수 있습니다.
노트:
- 세션 ID는 RFC 4122의 알고리즘으로 생성 된 고유 한 전역 식별자입니다.
- master_login.php는 화이트리스트의 도메인으로 만 리디렉션됩니다.
- 마스터와 클라이언트는 서로 다른 최상위 도메인에있을 수 있습니다. 예 : client1.abc.com, client2.xyz.com, login.mydomain.com
답변
바퀴를 다시 발명하지 마십시오. JOSSO, OpenSSO, CAS, Shibboleth 등과 같은 많은 오픈 소스 교차 도메인 SSO 패키지가 있습니다. 전체 (IIS, AD)에서 Microsoft 기술을 사용하는 경우 대신 ADFS (Microsoft Federation)를 사용할 수 있습니다.
답변
호스트 이름은 어떻게 다릅니 까?
이러한 호스트는 쿠키를 공유 할 수 있습니다.
- mail.xyz.com
- www.xyz.com
- logon.xyz.com
그러나 다음은 할 수 없습니다.
- abc.com
- xyz.com
- www.tre.com
전자의 경우 쿠키 기반 솔루션을 사용할 수 있습니다. GUID와 데이터베이스 세션 테이블을 생각해보십시오.
답변
Active Directory를 사용하는 경우 각 앱이 인증에 AD를 사용하도록 할 수 있으며 로그인이 원활 할 수 있습니다.
그렇지 않으면 애플리케이션이 백그라운드에서 서로 통신 할 수있는 경우 세션 ID를 사용하고 하나의 앱에서 다른 모든 애플리케이션을 처리하는 ID 생성을 처리 할 수 있습니다.