2013-01-18 2 views
3

두 개의 .NET C# 프로젝트가 있습니다. 동일한 도메인 아래에 배포됩니다 (예 : domain.com..ASPXAUTH 쿠키는 방화 광에서 볼 수 있지만 C# 코드에서 검색 할 수는 없습니다.

하나의 프로젝트가 몇 년 전에 만들어졌습니다. .NET 4.0을 사용하고 있습니다. MAIN_1이라고합시다. 이 프로젝트는 다른 외부 프로젝트를 사용하여 사용자를 인증합니다 (.NET 3.5). AUTH_PROJ라고 부르 자. VS2012에서 MVC4 및 .NET 4.5를 사용하여 새 프로젝트를 만들고 있습니다. MAIN_2라고 부르 자. MAIN_1 및 MAIN_2는 동일한 도메인 (예 : domain.com)에 배포됩니다. 내 목표는 MAIN_1에서 사용자 로그인을하고 MAIN_2에서 인증하는 것입니다. 나는 온라인으로 수색하고이 포스트가 http://www.codeproject.com/Articles/106439/Single-Sign-On-SSO-for-cross-domain-ASP-NET-applic 아주 재미 있고 사용하기 편리한 것을 발견했다. Visual Studio 2012 Professional에서 간단한 MVC 프로젝트를 만들어 싱글 사인온을 테스트했습니다.

  1. 프로젝트 1 : .NET4.5 MVC4 인터넷 프로젝트. => 웹 사이트 1
  2. 프로젝트 2 : 프로젝트 1과 동일 => 웹 사이트 2
  3. 프로젝트 3 : .NET 4 MVC3 인터넷 프로젝트. => 웹 사이트 3
  4. 프로젝트 4 : 프로젝트와 동일한 2. 웹 사이트는이 4 개 프로젝트 4

, 나는 동일한 시스템 키를 추가하여 Web.config에서 폼 인증에 = "localhost"를 도메인을 추가 => 파일.

그런 다음 싱글 사인온을 테스트했습니다. 로그인 한 웹 사이트 1에 계정을 만들었습니다. 웹 사이트 2를 열었으며 이미 로그인되어 있습니다. 웹 사이트 3 및 4와 동일합니다.

하지만 다른 프레임 워크를 혼합하면 아무 것도 작동하지 않습니다.

브라우저 쿠키를 파이어 버그에서 확인했습니다. .ASPXAUTH 쿠키가 그대로 유지됩니다. 그러나 Project 1에서 쿠키를 만들고 Project 3을 디버그하면 모든 쿠키가 .ASPXAUTH 쿠키가 아닌 exept를 얻을 수 있습니다. .ASPXAUTH는 프레임 워크에 의존하며 파이어 폭스에서도 볼 수 있지만 다른 프레임 워크 프로젝트에서는 볼 수 없습니다.

누구나 내가 왜 .ASPXAUTH 쿠키가 C# 코드에서 보이지 않게되는지 알아낼 수 있습니까? 단일 사인을 할 수있는 다른 방법이 있습니까? 당신에게

답변

3

당신의 4.5 프로젝트에서을의 Web.config이 구성 스위치를 설정하십시오 :

<machineKey compatibilityMode="Framework20SP1" /> 

4.5 및 4.0 양식 인증 티켓을 다른 암호화 루틴을 사용합니다. 4.5 프로젝트에서 위의 스위치를 설정하면 4.0과 동일한 루틴을 사용해야합니다. 자세한 내용은 http://blogs.msdn.com/b/webdev/archive/2012/10/23/cryptographic-improvements-in-asp-net-4-5-pt-2.aspx을 참조하십시오.

+0

내 테스트 프로젝트에서 훌륭하게 작동합니다. 내가 일하러 갈 때 진짜 물건을 시험해 보겠습니다. 레비 감사합니다! =) – ydou

+0

또한 실제 프로젝트에서도 훌륭하게 작동합니다. 정말 고맙습니다.너는 나에게 많은 시간을 구해줬다. – ydou

+0

많은 sooooo 감사합니다! –

0

감사하지만 다른 프레임 워크를 혼합 할 때, 아무것도 정상

을 작동하지 않습니다. 보안 취약점으로 인해 .NET 버전간에 암호화 루틴이 변경되었습니다. 따라서 following update을 사용하여 서버를 패치하는 것이 좋습니다. 당신이 그렇게 할 수없는 몇 가지 이유를 들어, 사용하지 않는 것이 좋습니다 해결 방법이 있다면

:

<appSettings> 
    <add key="aspnet:UseLegacyFormsAuthenticationTicketCompatibility" value="true" /> 
    <add key="aspnet:UseLegacyEncryption" value="true" /> 
    <add key="aspnet:UseLegacyMachineKeyEncryption" value="true" /> 
</appSettings> 
관련 문제