it-swarm-korea.com

여러 도메인에 싱글 사인온을 설정하는 방법은 무엇입니까?

동일한 도메인에있는 두 사이트 인 a.domain.com과 b.domain.com에 대해 싱글 사인온을 설정했습니다.

나는 쿠키를 통해 그것을했지만 도메인에 따라 다릅니다. 그리고-그레이트 북에 쓰여진 것처럼-이제 다른 도메인에서 싱글 사인온 (single-on-on)이 필요해지면서 머리가 나빠졌습니다. 여기, 나는 심지어 그들을 받아 들일 수조차 없었다 reCaptcha )

다른 웹 사이트 (a.domain.com, b.anotherdomain.com 등)에서 누군가를 식별하고 싶습니다. 여러 도메인에서 싱글 사인온을 설정/관리하는 권장 방법은 무엇입니까? 제안서를 작성하기 전에 알아야 할 특정 보안 문제가 있습니까?

21
samy

스택 교환 네트워크 에 대해 싱글 사인온이 구현 된 방식은 매우 흥미 롭습니다. HTML 5 Local Storage 를 사용합니다. 브라우저 지원에 따라 유사한 방법을 사용할 수도 있습니다.

자세한 내용은 stackoverflow 블로그 게시물 Global Network Auto Login 을 참조하십시오.

16
Mark Davidson

OpenId에 외부 서비스를 사용할 필요는 없습니다. OpenId 서버를 내부적으로 호스팅하여 SSO에 사용할 수 있습니다. 이를 통해 오픈 소스 코드와 OpenId를 안전하게 만드는 데 필요한 모든 작업을 활용할 수 있습니다.

PS : OpenId를 사용하면 많은 사이트에서 고유 한 ID를 사용할 수 있지만 여전히 각 도메인에서 "수동으로"로그인해야합니다.

5
Olivier Lalonde

이에 대한 두 가지 좋은 프로토콜은 OAuth (http://en.wikipedia.org/wiki/OAuth) 및 SAML입니다. OpenID 또는 기타 인증을 사용하여 고유 한 "ID 공급자"사이트를 실행할 수 있습니다. 구혼.

5
nealmcb

아마도 ADFSv2 (Windows 2008R2 무료 다운로드)가 일반적인 도메인 쿠키를 사용하는 데 도움이 될 것입니다. 다음은 원하는 효과를 내기 위해 구성해야하는 C:\inetpub\adfs\ls에있는 web.config의 일부입니다.

  <!--
    Common domain cookie. A common domain cookie stores a list of recently visited Claims Providers 
    (also called Identity Providers), as described in Section 4.3.1 of Profiles for the OASIS Security 
    Assertion Markup Language (SAML) V2.0. It is recommended that you enable common domain cookies by 
    including the <commonDomainCookie> element in the web.config file.

      1.The writer attribute of the <commonDomainCookie> element specifies the address of the writer 
      service that a Claims Provider uses to set the common domain cookie once it has authenticated a user.
      This address should be a valid URL.
      2.The reader attribute of the the <commonDomainCookie> element specifies the address of the reader
      service that a claims-aware service (also called a Service Provider) uses to get the list of Claims
      Providers that it should present to the user. This address should be a valid URL.

      The following configuration enables the use of common domain cookies and specifies writer and reader 
      services as described previously. 

      A common Domain Cookie is named "_saml_idp" in 4.3.1 http://docs.oasis-open.org/security/saml/v2.0/saml-profiles-2.0-os.pdf
      Space delimited URI encoded

      RULES:
      Must be secure
      Must have path = /
      Must be leading period as in .domain.com 
      Can be session or persistant
      All providers should be configured similarly
      TODO-->
    <commonDomainCookie writer="" reader="" />
2
goodguys_activate

여기에 좋은 답변이 많이 있습니다.
다음은 좋은 해결책입니다.

  • OpenId
  • OAuth
  • SAML
  • ADFS
  • 로컬 스토리지

비록 이것들에 대해 조금 더 배우지 않고 실제로 구현하기가 쉽지 않다고 생각합니다.

더 나은 방법은 적절한 웹 SSO 제품을 구현하는 것입니다.하지만 귀하의 질문에 따르면 이것이 옵션이 아니라고 생각합니다 (그러나 나는 당신이 재고를 고심하고 설득하도록 촉구하지만).

내가 본 매우 단순한 솔루션 중 하나이며 실제로 일부 웹 SSO 제품도이 트릭을 사용합니다 (모든 상황에서 반드시이 방법을 권장하지는 않습니다. 아래 참조).
사용자를 인증 한 후 "ID 쿠키"를 발행하는 "인증"도메인을 세 번째로 보유하십시오. 다른 도메인의 웹 사이트는 인증 도메인에 간단한 POST 요청을 제출할 수 있으며, 여기에는 사용자의 쿠키 해당 도메인의 경우가 포함됩니다. 반환 된 응답은 기본적으로 원래 도메인, 사용자 인증 여부 및 필요한 경우 신원 정보를 알려줍니다.
사용자가 아직 인증되지 않은 경우 인증 도메인의 페이지로 리디렉션되어 비밀번호 등을 제출합니다.

이것은 설정하기가 쉽지만 실제로 보안을 유지하는 데는 몇 가지 어려움이 있습니다.
예를 들어, any 웹 사이트는 사용자의 신원을 검색 할 수 있습니다. 또한 응답 웹 사이트는 반환 된 응답을 수정하여 "속임수"할 수 있습니다.
물론 이러한 문제를 해결하는 가장 간단한 방법은 SAML/OpenId/etc입니다.

1
AviD

방금 가입했지만 다른 곳에서 답변을 찾지 못한 것은 놀라운 일입니다. 이미 알았 듯이 쿠키를 사용하여 대리 인증 토큰을 전달할 수 없습니다.

현재 사이트에 대한 인증이 구현되는 방법이나 사이트를 프로그래밍하는 데 사용할 수있는 도구에 대한 세부 정보는 제공하지 않았습니다. 그러나 인증 메커니즘은 웹 서버에서 실행되고 쿠키를 사용하여 세션을 추적하는 언어로 작성되었다고 가정합니다.

이 경우 세션이 인증되었는지 확인하기 위해 인증이 필요한 모든 URL에 이미 코드가 있으며 요청을 처리하거나 로그인 페이지로 리디렉션하는 적절한 조치를 취하십시오. 인증 된 세션이없고 URL에 전달 된 암호화 된 변수 (예 : GET)가있는 시나리오를 처리하기 만하면됩니다. 이 시점에서 값을 해독하고 유효 여부를 확인한 후 세션을 만듭니다. 그런 다음 로그인 페이지에서 성공적으로 로그인 한 후 URL에 적절한 키/값 쌍을 추가하여 리디렉션합니다.

간단한 개요입니다. 고려해야 할 사항이 있습니다 (예 : 모든 사이트에서 동일한 세션 데이터를 공유하고 다른 세션에 대해 세션을 리 바인드하여 서버 측에서 만료되지 않도록해야 함) 또한 재생 공격을 방지하는 방법에 대해서도 고려해야합니다 (예 : TTL 포함, 클라이언트 IP 주소 사용에주의)).

서버 측만 암호화/복호화하기 때문에 대칭 암호화가 적합합니다.

0
symcbean