2009-10-05 2 views
0

우리는 동일한 사용자 (또는 적어도 일부)를 사용하는 다중화 된 멤버쉽/역할 공급자와 연결된 PHP 사이트 (다른 ​​서버에있는)로 .NET 3.5로 만들어진 사이트를 가지고 있습니다. 우리는 싱글 사인온 (single sign-on) 사용의 확실성을 조사하고 있으며, 다른 사람들이 이처럼 작동하는 지 궁금해하고 있습니다.싱글 사인온 ASP.NET 및 PHP

PHP 사이트의 인증이 완료되면 세션 변수가 사용자 ID로 설정되고 사용자를 시작 페이지로 리디렉션합니다.

미래에는 항상 사용자가 ASP.NET 사이트에 로그인한다는 의미입니다. 그래서 내가 한 것은 ASP.NET과 동시에 PHP 사이트에서 인증을 시도하는 것입니다.

   HttpWebRequest req = HttpWebRequest.Create(url) as HttpWebRequest; 
       string data = string.Format("username={0}&password={1}", MembershipHelper.UrlEncode(username), MembershipHelper.UrlEncode(password)); 
       req.Method = WebRequestMethods.Http.Post; 
       req.ContentLength = data.Length; 
       req.ContentType = "application/x-www-form-urlencoded"; 
       req.AllowAutoRedirect = false; 
       req.CookieContainer = new CookieContainer(); 

       StreamWriter w = new StreamWriter(req.GetRequestStream()); 
       w.Write(data); 
       w.Close(); 

을하지만 당신이 이해할 수있는, 그것은 작동하지 않습니다 내가는 MembershipProvider에서 ValidateUser 방법에 논리를 추가 한 사용자의 암호를 사용할 수있게합니다. 내가 php 사이트를 방문 할 때 나는 아직 로그인하지 않았다. 물론 세션과 관련이 있지만, 올바르게 전달하는 방법을 알 수 없다.

+0

우리는 또한 .NET 사이트와 PHP 사이트간에 단일 사인온 (sing sign on concept)을 시도합니다. 우리가 어떻게 만들었습니까? SAML을 사용할 수 있습니까, OPENID? 무료입니까, 구매해야합니까? 거기에 보안 문제가 있습니까? 구현 단계와 내가 다운로드 한 곳을 제안 하시겠습니까? – Thilak

답변

3

표시된 코드는 PHP 사이트에 서버 측 요청을 수행하고 인증을 수행하기 위해 사용자 이름과 암호를 전달합니다. 또한 PHP 사이트에서 발급 한 세션 쿠키를 저장하기 위해 쿠키 컨테이너를 사용하고 있습니다.

인증에 성공하면 컨테이너 (GetCookies 메서드 사용)에서 세션 쿠키를 검색하고 AppendCookie을 사용하여 ASP.NET 페이지의 응답으로 보내야합니다. 이렇게하면 쿠키가 임시 쿠키 컨테이너 대신 클라이언트 브라우저에 저장됩니다. 쿠키가 사용자의 브라우저에 저장되면 PHP 사이트에 대한 다음 요청에 따라 자동으로 보내집니다 (이 사이트는 ASP.NET 사이트와 동일한 도메인에 제공됨). 그러면 로그인하게됩니다.

If 두 사이트 모두 다른 도메인에서 호스팅되며 쿠키를 사용하여 싱글 사인온 (SSO)을 수행하는 것이 어려울 수 있습니다.