문제

www.xyz.com 및 www.abc.com 웹사이트가 있다고 가정해 보겠습니다.

사용자가 www.abc.com으로 이동하여 일반 ASP .NET 멤버십 공급자를 통해 인증을 받았다고 가정해 보겠습니다.

그런 다음 해당 사이트에서 www.xyz.com 사이트(리디렉션, 링크 등 작동하는 모든 것)로 전송되며 www.abc.com 사이트의 의도는 해당 사용자를 isAuthenticated 상태로 다른 사이트로 전달하는 것이었습니다. www.xyz.com 사이트가 해당 사용자의 자격 증명을 다시 요청하지 않도록 합니다.

이것이 작동하려면 무엇이 필요합니까?여기에는 몇 가지 제약이 있지만 사용자 데이터베이스는 완전히 분리되어 있고 조직 내부에 있지 않으며 모든 측면에서 인증된 대로 stackoverflow.com에서 Google로 전달하는 것과 같으며 본질적으로 분리되어 있습니다.관련 기사에 대한 링크이면 충분합니다.

도움이 되었습니까?

해결책

web.config 인증 섹션을 다음과 같이 설정하여 FormAuthentication을 사용해 보세요.

<authentication mode="Forms">
  <forms name=".ASPXAUTH" requireSSL="true" 
      protection="All" 
      enableCrossAppRedirects="true" />
</authentication>

컴퓨터 키를 생성합니다.예: MachineKey를 생성하는 가장 쉬운 방법 – 팁과 요령:ASP.NET, IIS...

다른 애플리케이션에 게시할 때 인증 티켓은 숨겨진 필드로 전달됩니다.첫 번째 앱에서 게시물을 읽는 동안 두 번째 앱은 암호화된 티켓을 읽고 사용자를 인증합니다.다음은 필드를 게시하는 전달 페이지의 예입니다.

.aspx:

<form id="form1" runat="server">
  <div>
    <p><asp:Button ID="btnTransfer" runat="server" Text="Go" PostBackUrl="http://otherapp/" /></p>
    <input id="hdnStreetCred" runat="server" type="hidden" />
  </div>
</form>

코드 숨김:

protected void Page_Load(object sender, EventArgs e)
{
    FormsIdentity cIdentity = Page.User.Identity as FormsIdentity;
    if (cIdentity != null)
    {
        this.hdnStreetCred.ID = FormsAuthentication.FormsCookieName;
        this.hdnStreetCred.Value = FormsAuthentication.Encrypt(((FormsIdentity)User.Identity).Ticket);
    }
}

또한 이 문서의 5장의 교차 앱 양식 인증 섹션을 참조하세요. 록스 출신.홈브류 SSO 솔루션을 제공하는 것 외에도 위와 같은 답변을 권장합니다.

다른 팁

내장된 멤버십 시스템을 사용하는 경우 각 web.config에서 이와 같은 것을 사용하여 양식 인증으로 하위 도메인 간 인증을 수행할 수 있습니다.

<authentication mode="Forms">
    <forms name=".ASPXAUTH" loginUrl="~/Login.aspx" path="/" 
                  protection="All" 
                  domain="datasharp.co.uk" 
                  enableCrossAppRedirects="true" />

</authentication>

모든 web.config에서 이름, 경로, 보호 및 도메인이 동일한지 확인하십시오.사이트가 다른 컴퓨터에 있는 경우 machineKey와 유효성 검사 및 암호화 키가 동일한지 확인해야 합니다.

사용자 세션을 데이터베이스에 저장하는 경우 세션 테이블에서 Guid의 존재를 간단히 확인할 수 있습니다. 존재하는 경우 해당 사용자는 이미 다른 도메인에서 인증된 것입니다.이것이 작동하려면 사용자를 다른 웹사이트로 리디렉션할 때 URL에 세션 GUID를 포함해야 합니다.

.NET에 무엇을 사용할지는 모르겠지만 일반적으로 저는 사용합니다. 멤캐시드 LAMP 스택에 있습니다.

해결 방법은 응용 프로그램 유형과 응용 프로그램이 실행되는 환경에 따라 다릅니다.예:NT 도메인이 있는 인트라넷에서는 NTLM을 사용하여 세션을 복제할 필요 없이 인트라넷 경계에 있는 서버에 Windows 자격 증명을 직접 전달할 수 있습니다.

이를 수행하는 방법은 일반적으로 다음과 같이 명명됩니다. 싱글 사인온 (보다 위키피디아).

이 문제에 대한 접근 방식은 여러 가지가 있으며 이를 "교차 도메인 싱글 사인온(SSO)"이라고 합니다.Matej가 지적한 Wikipedia 기사는 오픈 소스 솔루션을 찾고 있는 경우 특히 유용합니다. 그러나 Windows 환경에서는 다음 두 가지 접근 방식 중 하나를 사용하는 것이 가장 좋습니다.

  1. 상업용 SSO 제품 구매(예: SiteMinder 또는 PingIdentity)
  2. MicroSoft의 도메인 간 SSO 솔루션을 사용하십시오. ADFS - Active Directory 페더레이션 서비스.(페더레이션은 여러 도메인의 동작을 조정하는 용어입니다)

SiteMinder를 사용했는데 잘 작동하지만 비용이 많이 듭니다.모든 MicroSoft 환경을 사용한다면 ADFS가 최선의 선택이라고 생각합니다.이것부터 시작하세요 ADFS 백서.

CAS와 같은 것을 사용하겠습니다.

[1]: http://www.ja-sig.org/products/cas/ 카스

이것은 해결된 문제이므로 직접 롤링하는 것을 권장하지 않습니다.

또는 자신만의 사이트를 만들고 싶지만 문제의 사이트가 동일한 서버에 없거나 공유 데이터베이스에 액세스할 수 없는 경우(이 경우 위의 응답 참조) 다음을 배치할 수 있습니다. 웹 비콘 다른 사이트를 다시 참조하는 각 사이트에서.

사용자 ID(암호화 및 타임 스탬프)를 통과하여 사이트 B를 호출하는 단일 픽셀 이미지(웹 비콘)를 사이트 A에 배치합니다.그러면 로그인된 것으로 설정된 사용자에 대해 사이트 B에 새 사용자 세션이 생성됩니다.그러면 사용자가 사이트 B를 방문했을 때 이미 로그인되어 있을 것입니다.

통화를 최소화하려면 홈 페이지에만 웹 비콘을 배치하거나 로그인 확인 페이지에 배치하면 됩니다.나는 과거에 파트너 사이트 간에 정보를 전달하기 위해 이것을 성공적으로 사용했습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top