我正在设计一个RESTful Web服务(JBoss + RESTeasy)。 UI程序员正在编写一个将使用它的Ajax Web应用程序。 Web应用程序将是一个HTML页面,其中所有内容都使用JavaScript完成。为了安全起见,所有流量都通过SSL。
目前我正在使用基本身份验证。 UI程序员可以显示一个对话框来获取用户名和密码,并在标题中添加“Authorization:Basic xxxxx”。不幸的是,如果密码错误,会出现丑陋的浏览器登录对话框。此外,用户无法注销。这是不可接受的。
似乎无法在我们将使用的任何浏览器中拦截对XMLHttpRequest的401响应。
基于表单的身份验证对我们不起作用。我们需要在一段时间不活动(相当于会话超时)后自动注销。当客户端需要JSON对象时,我们不能让服务器突然返回登录页面。
JBoss提供四种身份验证策略:BASIC,FORM,CLIENT-CERT和DIGEST。我认为DIGEST与BASIC有同样的问题。这四个都不是我们想要的。
此Web应用程序将是唯一的客户端(目前),因此不需要使用BASIC。我可以安装其他任何身份验证策略吗?例如,我可以使用WSSE UsernameToken的实现吗? (如O'Reilly RESTful Web服务手册第8章所述。)服务器将在WWW-Authenticate标头中发送“WSSE”而不是“Basic”,并且可能是浏览器会忽略它并将其直接传递。
我想配置它所属的安全性 - 在JBoss配置文件中,而不是在我的RESTful Web服务中 - 所以我正在寻找一个可以插入JBoss的实现。
答案 0 :(得分:7)
如果浏览器无法识别WWW-Authenticate标头中的身份验证方案,则不会显示密码对话框。您最好的选择可能是在服务器上继续使用基本身份验证,同时手动将标头设置为类似“基本/ MyApp”的401响应。