2014-01-16 4 views
2

폼 인증을 사용하여 두 개의 별도 IIS 웹 사이트 (공용 도메인 사용)에 SSO를 설정하려고합니다. auth 쿠키를 공통 도메인으로 설정하고 일치하는 컴퓨터 키를 사용하여 암호 해독을 사용하는 일반적인 방법을 사용하고 있습니다.폼 인증 SSO - User.Identity.IsAuthenticated == false 이유

이 도구는 내가 만든 테스트 사이트에서 아무런 문제없이 작동합니다. 그러나 기존 Web Forms 사이트에서이를 구현하려고 할 때 이해할 수없는 부분이 있습니다. 나는이 두 가지를 어떻게 다른 하나는 (로그 아웃됩니다 하나 개의 사이트에 로그인 할 때마다 추가 보너스로서

var cookie = FormsAuthentication.GetAuthCookie("username", false); // works 
var ft = FormsAuthentication.Decrypt(cookie.Value);  // returns correct info 
var isAuthentication = User.Identity.IsAuthenticated;    // false 

:

나는 하나 개의 사이트에 로그인

, 두 번째 사이트의 테스트 코드는 다음과 같은 결과를 가지고 .)

내가 여기에서 빠뜨리는 근본적인 것이 있어야합니다.

이있는 FormsAuthentication 티켓은 문제없이 해독 것으로 보인다하더라도, User.Identity.IsAuthenticated 세트 false 있나요?

업데이트 : 아래에 지적한대로 - FormsAuthentication.GetAuthCookie은 기존 인증 쿠키를 얻는 유효한 방법이 아닙니다. 어느 날이 날 가져온다 : 브라우저에서 최상위 도메인 쿠키를 볼 수 있지만 요청에 표시되지 않습니다. 나는 이것이 문제가 발생한 곳이라고 생각한다.

해결 방법 : Web.config의에 의해 지정된 두 사이트는 닷넷 프레임 워크의 동일한 버전을 대상으로하지 않은 :

<httpRuntime targetFramework="4.5" /> 
<compilation debug="true" targetFramework="4.5" /> 

을 문제를 해결 같은 프레임 워크를 대상으로 두 사이트를 업데이트.

+0

이 스레드가 도움이 될 수 있습니다. http://stackoverflow.com/questions/30091530/request-isauthenticated-always-returning-false –

답변

2

GetAuthCookie 새로운 쿠키를 작성

http://msdn.microsoft.com/en-us/library/vstudio/3fay1e4k(v=vs.100).aspx

주어진 사용자 이름에 대한 인증 쿠키를 생성한다. 이 옵션은 쿠키를 보내는 응답의 일부로 설정하지 않으므로 응용 프로그램에서 쿠키가 발급되는 방식을보다 잘 제어 할 수 있습니다.

작동하는 것은 당연하지 만 기존 쿠키를 조사하지 않습니다.

내 이론은 x64 컴퓨터에 새 사이트를두고 레거시 웹 사이트를 x86에 배치한다는 것입니다. 키가 동일해도 이러한 시나리오에서는 암호화가 다릅니다. 또 다른 이유는 .net의 다른 버전 인 .net에서 암호화 알고리즘이 변경 되었기 때문입니다.

+0

나는 그것이 기존 쿠키를 읽지 않는다는 것을 깨닫지 못했다. 고마워. 두 번째 부분에 관해서는 두 사이트가 동일한 시스템에 있으므로 문제가 아니라고 생각합니다. 다른 버전의 .Net을 사용할 수도 있지만 –

+0

그래, 암호화 알고리즘이 .net 4에서 변경되었습니다. –

+0

+1 나를 올바른 방향으로 가리키기 위해서. 이 문제는 4.0과 4.5 사이의 사이트에서도 발생합니다 ('web의'HttpRuntime'과'Compilation' 태그로 지정됨).config') –