如何设计REST后端/ Ajax前端应用程序的身份验证和授权系统
我开始一个新的项目,我们正在计划建立一个安静的后端和一个AJAX字体结束。我通过专注于识别我拥有的所有资源和各种HTTP动词将做他们,他们的URI和这些资源的JSON表示来解决问题。
我在寻找最好的设计来保护后端。这里是我考虑的设计清单。我正在寻找下面没有列出的替代设计,优点,缺点建议。系统将使用Spring 3.0和可能的Spring Security 3.0实现,SSL将用于系统的许多部分,但不是所有的部分,因此一些请求可能来自SSL,有些可能不会。 选项1:使用HTTP会话 显示标准登录屏幕,创建服务器端会话,让tomcat发回一个jsessionid cookie,并让ajax客户端在每个XHR请求中包含JSESSIONID cookie。这个选项只是觉得这是错误的方法,基于以下原因。 >连接变成了statefull,这是违反REST的规则 选项2:找到一个开源的基于Java的安全库 除了Spring安全性我还没有找到任何其他Java库,任何建议高度赞赏。 选项3:尝试使用现有协议(如OAuth) 在我的简短的看看OAuth,它似??乎是设计为跨站点的认证,每个网站都有自己的用户数据库。在这个系统中,我想要一个全局用户数据库跨所有后端ajax服务共享。 选项4:使用SAML和Shiboleth 这个选项似乎过度杀死,非常复杂的设置和维护。 选项5:为每个请求发送用户名和密码 这要求用户在每次请求时都发送用户名和密码,这意味着前端AJAX应用程序必须将用户名和密码存储为JavaScript对象,如果用户离开页面,则返回用户名/密码组合将会消失并且可能会强制用户再次登录。我不想让前端尝试把用户名和密码放入cookie,因为这将包括安全。 选项6:实现我自己的认证/授权协议 创建一个REST服务,用户可以向其显示其用户名/密码组合,然后返回和安全令牌,他们必须在每次请求时将其发送回服务。安全令牌将由服务进行数字签名,并且将具有到期时间。令牌将仅对大多数操作有好处,高安全性操作将需要新的登录屏幕作为确认操作的端口。 这种方法的问题是,我必须发明另一个安全协议,似乎总是浪费时间。 我相信我不是唯一的人反对这个问题,我希望堆栈溢出社区可以指向一些我还没有找到的选项和工具。
看看
Apache Shiro.它是一个具有会话管理功能的身份验证系统,可用于跨应用程序共享会话。这可能是最简单的事情。
或者你可以使用Spring Security(或Shiro)与记住我cookie,它是在webapps共享的(只要它们在同一个HTTP域中)。记住我的cookie将类似于你的令牌在选项6中。你可以设置cookie的过期,所以它是短暂的像会话cookie或长期像常规记得我。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |