2009-10-23 4 views
6

나는 RESTful 웹 서비스 (JBoss + RESTeasy)를 설계하고있다. UI 프로그래머는이를 사용하는 Ajax 웹 앱을 작성하고있다. 웹 응용 프로그램은 JavaScript로 이루어진 모든 HTML 페이지로 구성됩니다. 보안을 위해 모든 트래픽은 SSL을 통과합니다.브라우저 팝업을 사용하지 않는 Ajax 인증

현재 기본 인증을 사용하고 있습니다. UI 프로그래머는 사용자 이름과 암호를 가져오고 헤더에 "Authorization : Basic xxxxx"를 입력하는 대화 상자를 표시 할 수 있습니다. 불행히도 암호가 틀리면 브라우저 로그인 대화 상자가 나타납니다. 또한 사용자가 로그 오프 할 수있는 방법이 없습니다. 이것은 받아 들일 수 없다.

우리가 사용할 브라우저의 XMLHttpRequest에 대한 401 응답을 가로채는 방법이없는 것처럼 보입니다.

양식 기반 인증이 작동하지 않습니다. 일정 시간 동안 사용하지 않으면 자동으로 로그 오프해야합니다 (세션 시간 초과와 동일). 클라이언트가 JSON 객체를 기대할 때 서버가 갑자기 로그인 페이지를 반환하도록 할 수 없습니다.

JBoss는 BASIC, FORM, CLIENT-CERT 및 DIGEST의 네 가지 인증 전략을 제공합니다. DIGEST는 BASIC과 같은 문제가 있다고 생각합니다. 네 가지 중 어느 것도 우리가 원하는 것입니다.

이 웹 응용 프로그램은 현재로서는 유일한 클라이언트이므로 BASIC을 사용할 필요가 없습니다. 설치할 수있는 다른 인증 전략이 있습니까? 예를 들어 내가 사용할 수있는 WSSE UsernameToken 구현이 있습니까? (O'Reilly RESTful Web Services 책의 8 장에서 설명했다.) 서버는 WWW-Authenticate 헤더에서 "Basic"대신 "WSSE"를 보내고 아마도 브라우저는 그것을 무시하고 바로 통과 할 것이다.

내 RESTful 웹 서비스가 아닌 JBoss 구성 파일에 보안을 구성하려고합니다. 그래서 JBoss에 연결할 수있는 구현을 찾고 있습니다.

답변

7

브라우저는 WWW-Authenticate 헤더의 인증 체계를 인식하지 못하면 암호 대화 상자를 표시하지 않습니다. 가장 좋은 방법은 401 응답에 대해 "Basic/MyApp"와 같은 헤더를 수동으로 설정하는 동안 서버에서 기본 인증을 계속 사용하는 것입니다.

+0

요청이 웹 서비스에 도달하기 전에 인증이 수행됩니다. 보안 프레임 워크 앞에있는 필터를 작성하여이 문제를 해결할 수 있습니까? 그런 다음 웹 프로그래머에게 첫 번째 요청에 "Authorization : Basic/MyApp"헤더를 추가하라고 지시 할 수 있습니다. 그러면 필터가이를 "Authorization : Basic"으로 다시 쓰고 "WWW-Authenticate : Basic/MyApp"로 응답의 "WWW-Authenticate : Basic"헤더를 다시 쓸 수 있습니다. 다른 클라이언트는 일반 기본 인증을 사용할 수 있습니다. 이게 효과가 있니? 나는 그것이 가능할 것이라고 생각한다. –

+0

흠 ... 서버의 스크립트 수준에서 인증을 제어 할 수 있다고 가정했는데 인증이 처리 된 후 응답을 보내기 전에 헤더가 설정됩니다. JBoss에 익숙하지 않지만, 인증이 일어나기 전에 요청을 필터링하고 다시 작성할 수 있다면 가장 좋은 방법이라고 생각됩니다. 또한 웹 응용 프로그램에서 Authorization 헤더를 설정하면 일반 클라이언트가 영향을받지 않습니다. 좋은. –

+0

결국, 사전 로그인 필터를 사용할 수 없습니다. WebLogic 서버는 허용하지만 표준에서는 허용하지 않으며 JBoss와 Tomcat은 허용하지 않습니다. JAAS와 바이올린을해야 할 것 같습니다. –

관련 문제