2012-05-09 1 views
2

WIF를 사용하여 STS를 설정했으며 RP가 사용자를 요구하지 않고 로그인했는지 여부를 RP가 결정할 수 있도록 사용자가 로그인했는지 여부를 공개하려고합니다 STS로 리디렉션하고 돌아갑니다. 사용자가 로그인 한 경우 RP에서 다른 프로세스 흐름이 발생하므로 프로세스의이 시점에서 로그인을 강요하지는 않아야합니다.User.Identity.Is generic asp.net 처리기에서 인증 된 사용

: 컨텍스트는 processRequest 메소드로 전달 된 HttpContext를 어디

내 계획은 HttpWebRequest를 통해 쳤을 때, context.User.Identity.IsAuthenticated (의 출력을 반환하는 STS에 대한 간단한 제네릭 처리기를 만드는 것이 었습니다

public void ProcessRequest(HttpContext context) 
{ 
    context.Response.ContentType = "text/plain"; 

    if (context.User != null && context.User.Identity.IsAuthenticated) 
     context.Response.Write("True"); 
    else 
     context.Response.Write("False"); 
} 

사용자가 로그인 한 상태에서이 핸들러를 직접 누르면 실제로 반환되지만 RP에서 프로그래밍 방식으로 처리기를 누르는 경우 False가 반환됩니다 (사실 ID는 null 임). RP에서 핸들러를 치면 RP에있는 사용자의 상태가 반환됩니다. 아니면 내가 잘못하고있는 것일 수 있습니까?

답변

1

요청과 함께 STS 인증 쿠키를 보내는 경우에만이 핸들러가 작동합니다 (true를 반환). 귀하의 웹 브라우저에만 이러한 쿠키가있을 수 있습니다. 따라서 HttpWebRequest를 통해 수행 할 수 없습니다. 또한 브라우저에서 직접 핸들러를 호출 할 때 이것이 작동하는 이유입니다.

0

이 글은 약간 오래된 글이지만,이 페이지에 올라온 다른 사람들에게 도움이 될 것입니다.

인증 뒤에있는 마술은 STS 앱에서 사용자의 클라이언트 (예 : 브라우저)로 전송되는 세션 및 인증 쿠키입니다. STS 및 RP 응용 프로그램이 어떻게 디자인되고 통신되는지 잘 모르겠습니다. 따라서 답변을 일반적인 것으로 유지하겠습니다. RP 앱에 인증 상태를 알려면 다음을 수행해야합니다.

1) 사용자 클라이언트와 RP 앱간에 두 쿠키를 공유합니다. 이 시나리오에서는 자체 클라이언트를 만들어 사용자가 STS 앱을 방문하는 데 사용하도록해야 할 것 같습니다. 이는 표준 브라우저에서 쿠키를 가져올 수 없기 때문입니다. 빌드 한 클라이언트는 RP 애플리케이션이 가져올 수있는 쿠키를 어딘가에 보내고이를 HttpWebRequest.CookieContainer에 저장하여 성공적으로 처리기의 결과를 얻을 수 있습니다. 이 방법을 설명하기 만하면 그것이 가능하고 얼마나 복잡하고 왜곡되어 있는지 보여줍니다.

2) 또는 사용자의 로그인 상태를 추적해야합니다. context.User를 확인하는 대신, 처리기는 호출 RP 응용 프로그램에서 사용자 ID를 가져와 해당 사용자가 로그인했는지 (즉, 해당 사용자에 대한 활성 세션이 있는지) 확인해야합니다. 예를 들어 데이터베이스에서 세션을 추적하거나 저장하거나 활성 세션에 액세스하는 몇 가지 방법에 대해 다음 스레드를 살펴볼 수 있습니다.

List all active ASP.NET Sessions