2011-02-16 3 views
0

Apache Tomcat을 통해 제공되는 REST API는 Flash 웹 애플리케이션과 통신하도록되어 있습니다.인증 전에 인바운드 Java 서버 인증 헤더 재 작성

인증은 기본 인증 안의 SSL (기본 인증 안의 암호가 SHA-2 '임에도 불구하고)을 사용하여 수행됩니다. 문제는 Flash 클라이언트에 기본 인증을 사용하면 헤더의 "WWW 인증 : 기본"으로 인해 표준 브라우저 로그인 상자가 표시되는 것입니다. Flash는 요청 전에 Authorization 헤더를 수동으로 설정하여이를 우회 할 수 없습니다.

다른 클라이언트는 기존 메커니즘을 통해 인증 할 수 있어야하므로 인증 논리를 다시 작성하는 것이 이상적이지는 않습니다.

플래시 클라이언트와주고받은 인증 헤더를 동적으로 다시 작성하여 브라우저가 인증 메커니즘을 이해하지 못하고 대화 상자를 표시하지 못하게하는 기본 인증에 다른 이름을 사용할 수 있다는 생각이 들었습니다. Tomcat과의 인증 헤더는 "WWW-Authenticate : Basic"에서 "WWW-Authenticate : PretendBasic"로 다시 작성할 수 있지만 이상적으로 컨테이너 보안은 다시 작성된 후에 기본 인증을 처리 할 수 ​​있습니다.

필자는 인바운드 헤더를 "WWW-Authenticate : PretendBasic"로 "WWW-Authenticate : Basic"으로 다시 쓰는 필터를 작성하여 다음 필터 체인이 인증되어 요청이 정상적으로 처리 될 것을 기대했습니다. 불행히도 서블릿 스펙에서는 인증 전에 필터를 삽입 할 수 없다고 명시하고 있습니다. 이 작업의 유일한 가능성은 플래시 클라이언트에서 오는 경우 요청에 대한 헤더 재 작성을 먼저 수행 한 다음 기존 컨테이너 관리 보안 시스템에 인증을 전달하는 스택 가능한 JAAS 인증 모듈을 만드는 것입니다.

저는 JAAS에 익숙하지 않기 때문에 커뮤니티가이를 달성하는 방법에 대해 밝힐 수 있는지, 그리고 처음에는 좋은 생각인지 여부를 알려 드리고자합니다.

답변

0

플래시 응용 프로그램이 항상 기본으로 보호 된 서버에서 작동하는 경우 웹 응용 프로그램에 대한 첫 번째 요청을 생성하기 전에 자격 증명을 요청할 수 있습니다. 따라서 첫 번째 요청에는 이미 인증 헤더가 포함되어 있으며 응답으로 401을받지 못합니다.

+0

안타깝게도 Flash에서 명시 적으로 인증 헤더를 설정하는 것은 허용되지 않습니다. 이것은 Flash Player에 의해 시행되는 보안 제한 사항입니다. – zod90

0

WWW-Authenticate를 통해 HTTP Basic을 모방 한 인증을 사용하면 트릭을 수행 할 수 있다고 생각했을 것입니다.

현재 HTTP 기본 인증이 작동하는 곳에서는 HTTP 기본이지만 인증 헤더 대신 WWW-Authenticate 헤더에 대해 다른 인증자를 추가하십시오.

그런 다음 Flash에 헤더를 포함하고 해당 클라이언트에서 HTTP Basic을 무시할 수 있습니다.

나는 Jetty에서 3 가지 다른 인증 방법을 사용하여 비슷한 작업을 수행했습니다. 나는 Tomcat 방식이 무엇인지 모릅니다.