Angularjs 在不违反RESTful原则的情况下在Angular中进行身份验证和授权的最佳实践?
我已经读了很多关于REST和Angular的身份验证和授权的文章,但是我仍然觉得我没有一个很好的解决方案来解决我希望做的事情。出于某些背景,我计划在AngularJS中构建一个应用程序,我想支持:Angularjs 在不违反RESTful原则的情况下在Angular中进行身份验证和授权的最佳实践?,angularjs,rest,authentication,single-page-application,Angularjs,Rest,Authentication,Single Page Application,我已经读了很多关于REST和Angular的身份验证和授权的文章,但是我仍然觉得我没有一个很好的解决方案来解决我希望做的事情。出于某些背景,我计划在AngularJS中构建一个应用程序,我想支持: 有限的客人访问 通过身份验证后对应用程序的基于角色的访问 通过API进行身份验证 对RESTAPI的所有调用都需要通过SSL进行。我希望在不违反RESTful原则的情况下构建应用程序,即不将会话状态存储在服务器上。当然,无论在客户端进行什么样的授权,都必须在服务器端加强。因为我们需要在每个请求中传递整
curl -v -X POST --data '{"username":"austen@example.com","password":"password"}' "https://app.example.com/api/session" --header "Content-Type:application/json"
HTTP/1.1 201 Created {
"session": {
"id":"520138ccfa4634be08000000",
"expires":"2014-03-20T17:56:28+0000"
}
}
响应
curl -v -X POST --data '{"username":"austen@example.com","password":"password"}' "https://app.example.com/api/session" --header "Content-Type:application/json"
HTTP/1.1 201 Created {
"session": {
"id":"520138ccfa4634be08000000",
"expires":"2014-03-20T17:56:28+0000"
}
}
状态代码
- 201-已创建,新会话已建立
- 400-请求错误,JSON对象无效或缺少必需的信息
- 401-未经授权,检查电子邮件/密码组合
- 403-访问被拒绝、禁用帐户或许可证无效
Authorization: MyScheme 520138ccfa4634be08000000
然后,后端服务器将负责从请求中提取这些信息,找到相关的用户并强制执行请求的授权规则。它可能还应该更新会话的过期时间
如果所有这些都是通过SSL发生的,那么我是否为我应该防范的任何类型的攻击敞开了大门?您可以尝试猜测会话密钥并将它们放在头中,因此我想我可以在会话密钥中附加一个用户GUID,以进一步防止暴力攻击
我已经有好几年没有积极编程了,现在我又回到了这里。如果我迟钝或不必要地重新发明轮子,我表示歉意,只是希望根据我迄今为止的阅读,让社区运行我的想法,看看它们是否通过了石蕊测试。这是一篇关于使用angular构建的身份验证和登录服务的难以置信的文章
这个问题很好地总结了我对REST的理解 如果将令牌存储在会话中,您仍在服务器端创建状态(这是一个问题,因为该会话通常只存储在一台服务器上,可以通过粘性会话或其他解决方案来缓解) 我想知道您创建RESTful服务的理由是什么,因为这可能不是一个大问题 如果在主体中随每个请求一起发送令牌(因为所有内容都是用SSL加密的,所以这是可以的),那么可以有任意数量的服务器(负载平衡)为请求提供服务,而无需事先了解状态 长话短说,我认为以RESTful实现为目标是一个很好的目标,但是当涉及到身份验证和验证授权时,纯粹的无状态肯定会增加一层复杂性 到目前为止,我已经开始在考虑REST的情况下构建后端,创建有意义的URI并使用正确的HTTP谓词,但为了简化身份验证(不使用多个服务器时),仍然在会话中使用令牌
我通读了你发布的链接,AngularJS一个似乎只关注客户端,在那篇文章中似乎没有明确提到服务器,他确实链接到另一个(我不是节点用户,所以请原谅我的解释有误)但是,服务器似乎依赖于客户端来告诉它它的授权级别,这显然不是一个好主意。当有人询问REST身份验证时,我听从Amazon Web服务的建议,基本上建议“这样做”。为什么?因为,从“群体智慧”的角度来看,AWS解决了问题,被比大多数人更了解和关心安全请求的人大量使用、大量分析和审查。而安全是一个“不重新发明轮子”的好地方。就“站在肩膀上”而言,你可以比AWS做得更糟 现在,AWS不使用令牌技术,而是使用基于共享机密和有效负载的安全哈希。它可以说是一个更复杂的实现(包括所有的规范化过程等) 但它是有效的 缺点是,它要求您的应用程序保留个人共享的秘密(即密码),并且还要求服务器具有访问该秘密的权限