我正在设计一个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的REST Web服务本书的第8章描述.)服务器将在WWW身份验证标头中发送"WSSE",而不是"基本"和大概的浏览器会忽略它和权利,通过它传递.
我想配置它所属的安全性 - 在JBoss配置文件中,而不是在我的RESTful Web服务中 - 所以我正在寻找一个可以插入JBoss的实现.
如果浏览器无法识别WWW-Authenticate标头中的身份验证方案,则不会显示密码对话框.您最好的选择可能是在服务器上继续使用基本身份验证,同时手动将标头设置为401响应的"Basic/MyApp".