Angularjs 客户端带有cookie的REST API身份验证和授权工作流
我正在Symfony2中构建一个restapi应用程序,并试图找到一种处理用户身份验证和授权的好方法。有很多解决方案,但到目前为止,没有一个解决了我所有的需求/顾虑 该API主要由AngularJS SPA使用,其中用户使用用户名和密码组合登录。让GUI用户能够:Angularjs 客户端带有cookie的REST API身份验证和授权工作流,angularjs,rest,symfony-2.6,Angularjs,Rest,Symfony 2.6,我正在Symfony2中构建一个restapi应用程序,并试图找到一种处理用户身份验证和授权的好方法。有很多解决方案,但到目前为止,没有一个解决了我所有的需求/顾虑 该API主要由AngularJS SPA使用,其中用户使用用户名和密码组合登录。让GUI用户能够: 使用用户名和密码登录 使用“记住我”复选框“永远”登录(可能一周左右) 同时在不同浏览器中使用“记住我”(如facebook) 从浏览器中删除Cookie以注销用户 在服务器端,我希望保持严格的RESTful。我想出了一个解决方案
- 使用用户名和密码登录
- 使用“记住我”复选框“永远”登录(可能一周左右)
- 同时在不同浏览器中使用“记住我”(如facebook)
- 从浏览器中删除Cookie以注销用户
- 每个令牌数据库项必须具有预定义的生存期(在配置中设置)
- 过期日期时间必须存储在数据库中
- 旧的令牌哈希在过期时必须从db中删除(登录尝试时或通过cron)
- 令牌与用户是多对一的-用户在任何给定时间都可以有多个活动令牌
- 用户id也可能包含在请求中,有待决定
- 始终从cookie中读取令牌,因为用户可能希望删除它以在浏览器中注销自己
这个工作流程看起来正常吗?我遗漏了什么吗?我做了一个名为的项目,它使用Json Web令牌(JWT)进行授权-基本和承载。我相信它可以完成您描述的大多数事情,比如允许令牌过期和添加用户id或角色。它可能会帮助你做你想做的事情
它是使用WebAPI2构建的,前端可以是基于AngularJS或JQuery的 您是否考虑过使用本地存储而不是cookie。您选择Cookie的具体原因是什么?如果您没有将Cookie发送到服务器,为什么要使用它们?您不能使用本地存储或某些客户端方法来存储它。我们在一个系统上进行了笔试,其中一个标记是可以通过客户端代码修改的cookies。通过在不同浏览器上同时使用“记住我”(如facebook)“你是说记住我是共享的吗?即我在Firefox中打了勾,所以Chrome应该使用它?如果是这样,我认为那是不可能的。Cookie、缓存和本地存储对每个浏览器都是本地的。Cookie将您限制为基于浏览器的客户端-如果您希望在将来提供API(用于本机应用程序),则这对您没有好处。此外,请确保您添加了CSRF保护