gpt4 book ai didi

angularjs - 在客户端使用 cookie 的 REST API 身份验证和授权工作流程

转载 作者:行者123 更新时间:2023-12-03 10:13:22 25 4
gpt4 key购买 nike

我正在 Symfony2 中构建一个 REST API 应用程序,我正在尝试找到一种处理用户身份验证和授权的好方法。有很多解决方案,但到目前为止,没有一个解决了我的所有要求/担忧。

该 API 将主要由 AngularJS SPA 使用,其中用户使用用户名和密码组合登录。让 GUI 用户能够:

  • 使用用户名和密码登录
  • 使用“记住我”复选框“永远”登录(可能是一周或类似的时间)
  • 同时在不同浏览器中使用“记住我”(如 Facebook)
  • 从浏览器中删除 cookie 以注销用户

  • 在服务器端,我想保持严格的 RESTful。我想出了一个似乎是我需要的解决方案,但我想确保我没有遗漏任何东西。

    从服务器的 Angular 来看,成功登录尝试的工作流程:
  • 使用用户名和密码在/login API 端点上接收 POST
  • 生成一个新的 token 并将其返回给客户端。将该 token 的哈希值保存在 db 中。
  • 每个 token 数据库条目必须有一个预定义的生命周期(在配置中设置)
  • 到期日期时间必须存储在数据库中
  • 旧 token 哈希过期时必须从数据库中删除(在登录尝试时或通过 cron)
  • token 与用户是多对一的 - 用户可以在任何给定时间拥有多个事件 token

  • 从服务器的 Angular 对登录用户进行授权的工作流程:
  • 从 Authorization header 中提取 token
  • 用户 ID 也可能包含在请求中,待定
  • 散列 token 并将其与数据库中的每个用户散列进行比较
  • 如果数据库哈希之一与请求哈希匹配且未过期,则更新哈希过期并授权用户

  • 从客户端 (GUI) 的 Angular 来看,成功登录尝试的工作流程:
  • 使用用户名和密码向/login API 端点发送 POST 请求
  • 接收服务器生成的 token 。保存在浏览器中的cookie中(使用js,服务器不设置cookie)

  • 从客户端 (GUI) 的 Angular 来看,登录用户的授权工作流程:
  • 从 cookie 中读取 token 并在请求中设置 Authorization header ,例如 Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
  • 总是从 cookie 中读取 token ,因为用户可能想要删除它以在浏览器中注销自己。

  • 如果登录失败(cookie 删除或 401 响应)丢弃所有表单数据,删除 cookie 并重定向到登录屏幕。

    显然,存储在客户端的 cookie 将在每次请求时传递给服务器,因为这就是 cookie 的作用,但服务器将忽略它。 cookie 仅供客户端使用。增加的带宽开销被认为可以忽略不计。

    这个工作流程看起来没问题吗?我错过了什么吗?

    最佳答案

    我做过一个项目叫WebApiSecure使用 Json 网络 token (JWT) 授权 - 基础版 承载 .我相信它可以完成您描述的大部分事情,例如允许 token 过期和添加用户 ID 或 Angular 色。它可能会帮助您完成您想做的事情。

    它是使用 Web Api 2 构建的,前端可以是基于 AngularJS 或 JQuery 的。

    关于angularjs - 在客户端使用 cookie 的 REST API 身份验证和授权工作流程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27796374/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com