开发者

Ajax authentication without letting browser pop up login dialog

开发者 https://www.devze.com 2022-12-09 20:48 出处:网络
I am desiging a RESTful Web Service (JBoss + RESTeasy).The UI programmer is writing an Ajax web app that will use it.The web app will be one HTML page with everything done in JavaScript.For security,

I am desiging a RESTful Web Service (JBoss + RESTeasy). The UI programmer is writing an Ajax web app that will use it. The web app will be one HTML page with everything done in JavaScript. For security, all traffic goes through SSL.

Currently I'm using Basic authentication. The UI programmer can show a dialog to get a username and password and put "Authorization: Basic xxxxx" in the header. Unfortunately if the password is wrong, the ugly browser login dialog box comes up. Also there is no way for the user to log off. This is unacceptable.

There appears to be no way to intercept a 401 response to an XMLHttpRequest in any of the browsers we will use.

Form-based authentication won't work for us. We need an automatic logoff after some period of inactivity (the equivalent of a session timeout). We can't have the server suddenly return a login page when the client expects a JSON object.

JBoss offers four authentication strategies: BASIC, FORM, CLIENT-CERT and DIGEST. I think DIGEST has the same problem as BASIC. None of the four is what we want.

This web application will be the only client (for now) so there is no requirement to use BASIC. Is there any other authentication strategy I can install? For instance is there an implementation of WSSE UsernameToken I can use? (As described in Chapter 8 of the O'Reilly RESTful Web Services book.) The server would send "WSSE" instead of "Basic" in the WWW-Authenticate header and presumably the browser would ignore it and pass it right through.

I want to configure security where it belongs -- in the JBoss configuration f开发者_如何学Goiles, not in my RESTful Web Service -- so I'm looking for an implementation I can just plug into JBoss.


The browser won't present the password dialog if it doesn't recognize the authentication scheme in the WWW-Authenticate header. Your best bet may be to continue using basic auth on the server while setting the header manually to something like "Basic/MyApp" for 401 responses.

0

精彩评论

暂无评论...
验证码 换一张
取 消