2011-08-15 2 views
2

동일한 인증 쿠키를 사용하도록 구성된 동일한 서버에 두 개의 MVC3 사이트가 있습니다.ASP .NET Cross Site Forms 인증은 제품이 아닌 Dev에서 작동합니다.

첫 번째 사이트는 Windows 인증을 사용하는 인트라넷 사이트입니다. 이 사이트에는 사용자가 인증되었는지 여부를 확인하는 간단한 액션 하나가 있습니다. 사용자가 있었던 경우 응답에 추가하는 FormsAuthentication 쿠키가 만들어집니다. 이 쿠키는 사용자의 AD 그룹에서 결정한 일반 사용자를 위해 생성됩니다. 응답은 폼 인증을 사용하는 두 번째 사이트로 사용자를 리디렉션합니다.

로컬 컴퓨터에서 실행하면 모든 것이 위에서 설명한대로 작동합니다. 이것을 로컬 웹 서버에 배포하면 그렇지 않습니다. 나는 사용자의 그룹이 올바르게 결정되었고 그것이 쿠키에 대해 유효한 사용자를 생성 하는지를 테스트했으며, 웹 서버에서 이것이 올바른지 확인했다. 여기

내가 위의 모든 일을 해요 방법은 다음과 같습니다

첫째,이 두 사이트는 암호화 및 암호 해독에 동일한 동일한 시스템 키를 사용했다.

Site1에 쿠키를 만들 때 사이트 2에 생성 된 쿠키와 동일한 이름과 도메인을 가지고 있는지 확인합니다.

 var cookie = FormsAuthentication.GetAuthCookie(userName, false); 
    cookie.Domain = FormsAuthentication.CookieDomain; //This is the Domain of my 2nd site as they are different 

    HttpContext.Response.Cookies.Add(cookie); //Add my cookie to the response 
    HttpContext.Response.RedirectPermanent(urlForSite2); 

다시 로컬 컴퓨터에서 실행할 때 문제없이 작동합니다. 그러나 배포 할 때 요청에서 쿠키를 전달하지 않거나 응답에서이를 무시하고 있지만 이러한 경우 중 하나를 확인하는 방법을 모르겠습니다.

내가 필요한 답변을 얻는 데 도움이된다면 어떻게하는지에 대해 더 자세한 내용을 질문 할 수 있습니다.

답변

1

크로스 도메인 쿠키는 허용되지 않습니다. 두 개의 별도 도메인이있는 경우 하나는 다른 쿠키에 액세스 할 수 없습니다. 두 개의 개별 가상 디렉터리/응용 프로그램은 동일한 컴퓨터 키를 사용할 때 작동합니다. http://blogs.technet.com/b/sandy9182/archive/2007/05/07/sharing-forms-cookie-between-asp-net-web-application.aspx

하위 도메인간에 로그인 쿠키를 공유하려는 경우 로그인 쿠키의 Domain 속성을 두 번째 수준 도메인 "abc.com"으로 편집하여 "www.abc.com"과 "ww2"가되도록해야합니다. abc.com "은 쿠키에 액세스 할 수 있습니다. http://forums.asp.net/t/1533660.aspx

String usrName = User.Identity.Name.ToString(); 
HttpCookie authCookie = Security.FormsAuthentication.GetAuthCookie(usrName, false); 
authCookie.Domain = "abc.com"; 
Response.AppendCookie(authCookie); 
+0

동일한 서버 컴퓨터에 있어야합니까? 동일한 컴퓨터 작업과 다른 서버에있을 때는 작동하지 않습니다. machineKey가 같다고 확신합니다. –

+0

@JulianoOliveira - Forms Auth는 서버 팜 (별도의 컴퓨터)에서 작동하므로 machine.config의 machineKey 태그에 대한 모든 특성 (validationKey, decryptionKey, 유효성 검사 및 암호 해독)이 동일한 지 확인해야합니다. 서버가 다른 하위 도메인을 나타내는 경우 FormsAuthentication.SetAuthCookie를 호출 한 후 내 대답의 코드를 사용해야합니다. –

0

사실, 그것은 가능하지만, 도메인/하위 도메인의 쿠키 공유와 같은 간단하지 않습니다. 이 문서에 주어진 예 내가 무엇을하고 있었는지에 직접 적용되지 않았지만

http://www.codeproject.com/KB/aspnet/CrossDomainSSOModel.aspx

, 나는 몇 가지 아이디어가 내가 작업에 필요한 것을 얻을이 표현 사용할 수 있습니다. 결국 site2 web.config에서 구성 설정이 끝났습니다.

사이트 1 호스팅 기계의 특정 IP 주소로 주소 호스트 항목이 필요합니다 다음과 같이

내 URL이 있습니다. 내 IE 보안 설정 - 로컬 인트라넷 사이트의 항목이기도합니다.

이 응용 프로그램은 모두 동일한 기본 웹 사이트에서 실행되는 가상 디렉터리라는 점에 유의해야합니다.

나는 내 문제를 해결했지만 구성 파일에서 도메인을 빈 문자열로 설정한다고 생각했지만 작동하지 않았습니다. 나는 지금 무엇을 할 수 있을지 확신하지 못합니다. 이것은 내 로컬 컴퓨터에서 실행할 때 여전히 작동하지만 내 서버에서 실행할 때는 작동하지 않습니다. 유일한 차이점은 URL입니다. http://localhost/CompanyName.TVAP.IntranetSite

  • 사이트 2 : :이 몇 가지 설명을 추가 희망 http://localhost/TVAPDev/
  • 내 dev에 기계는 URL을

    • 사이트 1을 사용하고 있습니다. 이 답변은 실제로 내 질문에 편집으로 게시해야하지만, 원래 게시했을 때, 나는 그것이 작동했다고 생각했습니다.

      업데이트 : 내 대답은 위 URL에있는 것 같습니다. 내 dev 머신 URL은 모두이 경우 localhost 인 동일한 도메인 이름을 사용하고 있습니다. 동일한 도메인을 사용하도록 배포 된 웹 사이트를 변경하면 괜찮을 것입니다. 나는 그것이 효과를 얻을 때 업데이 트를 게시 할 것입니다.

    +0

    이제는 로컬 IIS 서버에서 위에서 언급 한 것처럼 dev 컴퓨터 URL을 사용하여 빈 문자열에 대한 web.config의 양식 설정에 도메인 특성을 그대로 두어야합니다. 그렇지 않으면 작동하지 않습니다. –

    관련 문제