2008-10-14 2 views
3

양식 인증 된 aspx 페이지에서 실행되는 Java 애플릿이 있습니다. 내 사이트의 .NET 1.1 버전에서 애플릿은 세션 쿠키에 액세스 할 수 있으며 서버에서 파일을 검색 할 수 있지만 .NET 2.0 버전에서는 인증에 실패합니다.Java 애플릿과 ASP.NET 세션 쿠키 공유

다른 포럼 게시물을 보았습니다. 2.0은 기본적으로 HttpOnly에 쿠키를 설정하지만 주어진 솔루션은 지금까지 저에게 효과적이지 않았습니다. 나는 2.0이 사용자 에이전트를 기반으로 차별화 될 수도있는 곳을 읽었다.

경험이나 통찰력이있는 사람이 있습니까?

답변

5

이 질문은 오래된 것이지만 나는 여기에 정답을 가지고있는 것이 가치 있다고 생각했다.

필립은 클라이언트 측 Java와 서버 측 Java를 혼동하고 있습니다. 사용자 정의 접근 방식을 사용하지 않고 Java (J2EE) 및 ASP.Net과 같은 두 가지 서버 측 플랫폼간에 세션을 공유 할 수 없다는 것이 맞습니다.

그러나 애플릿은 클라이언트 측이므로 호스트 페이지의 세션 정보에 액세스 할 수 있어야합니다. 문제는 ASP.Net 2.0이 세션 쿠키에 HttpOnly 플래그를 추가했기 때문입니다. 이 플래그는 JavaScript 및 Java 애플릿이이 쿠키에 액세스하지 못하게합니다.

해결 방법은 세션 쿠키에서 HttpOnly 플래그를 해제하는 것입니다. 당신은 이전 버전에서, ASP.Net의 최신 버전의 구성에서 그것을 할 수있을 수도 있지만 해결책은 당신의 Global.asax 파일에 다음 코드를 추가했다 :

protected void Application_EndRequest(object sender, EventArgs e) 
{ 
    /** 
    * @note Remove the HttpOnly attribute from session cookies, otherwise the 
    *  Java applet won't have access to the session. This solution taken 
    *  from 
    *  http://blogs.msdn.com/jorman/archive/2006/03/05/session-loss-after-migrating-to-asp-net-2-0.aspx 
    * 
    *  For more information on the HttpOnly attribute see: 
    * 
    *  http://msdn.microsoft.com/netframework/programming/breakingchanges/runtime/aspnet.aspx 
    *  http://msdn2.microsoft.com/en-us/library/system.web.httpcookie.httponly.aspx 
    */ 
    if (Response.Cookies.Count > 0) 
    { 
     foreach (string lName in Response.Cookies.AllKeys) 
     { 
      if (lName == FormsAuthentication.FormsCookieName || 
       lName.ToLower() == "asp.net_sessionid") 
      { 
       Response.Cookies[lName].HttpOnly = false; 
      } 
     } 
    } 
} 

참고 심지어이 수정과 모든 브라우저/OS/Java 조합이 쿠키에 액세스 할 수있는 것은 아닙니다. 현재 Windows XP에서 Java 1.6.0_13을 사용하여 Firefox 4.0.1에서 액세스 할 수없는 세션 쿠키 문제를 조사하고 있습니다.

해결 방법은 아빠가 제안한 접근 방식을 사용하는 것입니다. 세션 ID가 매개 변수로 애플릿에 전달 된 다음 요청 URL에 삽입됩니다 (서버에서 URL 세션을 시작해야 함) 수동으로 설정된 쿠키로 전송됩니다.

0

필립의 답변이 완전히 올바르지 않습니다. 내 워크 스테이션에서 HTTP 헤더를 스니핑하는 프로그램을 실행했는데 Java 애플릿은 실제로 상황에 따라 ASP.NET 인증 티켓을 제시합니다. 내 요구에 충분히 신뢰할 만하지는 않습니다.

결국 나는 이것에 대한 해결책을 찾았지만 완전히 내 문제를 해결하지는 못했습니다. .NET 2.0의 web.config에 항목을 추가 할 수 있습니다 : <httpCookies httpOnlyCookies="false" />; 하지만 이것은 모든 사용자에게 적용되지는 않았습니다.

웹 서버에서 아무것도 검색 할 필요가 없도록 Java 애플릿을 수정하는 것으로 장기적인 해결책이 밝혀졌습니다.

1

필립은 정확하고 올바르지 않습니다. 적어도 필자는 Java와 ASP.NET에 대해 모두 wrt입니다. 애플릿은 부정 행위로 인해 ASP.NET 세션에 액세스 할 수 있습니다. 필자의 경우 세션 ID를 애플릿의 매개 변수로 추가했습니다. 애플릿은 세션 ID를 요청에 쿠키로 추가합니다. 잘 작동하는 것 같아. (우리는 그 불쾌한 해커 민속을 포위하기 위해 세션 ID를 암호화했다.)

0

매우 늦은 답변 일 수 있지만, 더 간단한 해결책을 드릴 수 있습니다. - 일반적으로 항상 그런 것은 아니지만 애플릿은 인터페이스와 상호 작용을 위해 HTML과 자바 스크립트를 많이 사용합니다. - Javascript가 브라우저에서 실행됩니다. - 브라우저에서 Ajax를 호출합니다. - Ajax 호출은 비동기식이며 애플릿 논리에 쉽게 통합 될 수 있습니다.

Ajax 호출을 애플릿 논리와 통합하여 브라우저에 보안을 위임하는 우아한 솔루션을 찾을 수 있습니다.