过去一个小时我一直在堆栈溢出上研究这个主题,所以我想我只想问我所有的具体问题。我正在构建一个 Web 应用程序,目前使用 Laravel (PHP) 作为 API,使用 Angular 作为前端。我研究过 oAuth,但它有点令人畏惧,所以我希望实现一个更简单的解决方案,然后在必要时重建它。
我当前实现的流程如下。 Angular 将用户凭据(通过 https)发布到我的其余后端,这只是返回一个生成的字符串(这可能是随机的或加密生成的)。然后,这个字符串被存储为 cookie 或我认为合适的任何浏览器状态,然后附加到每个 API 请求以及 Angular 作为额外参数或请求 header 或其他内容的用户 ID。 API 使用它来检查用户是否有权访问所请求的资源并做出相应的响应。我可能还会在字符串上添加一个到期时间,该时间将在每次请求后重置。
我的问题是这是否是可接受的流程?就安全性而言,我最有可能面临哪些问题? CSRF? session 固定?
我知道这个问题之前已经被问过几次,但我只是希望进行新的讨论并指出相关信息。
最佳答案
如果我没理解错的话,这是我在很多 API 中见过的模型,尤其是在无状态 SOA 世界中。您所说的“字符串”通常称为“身份验证 token ”。所有非公共(public) API 方法都需要将 token (要使其有效 - 过期是必不可少的,否则有人可能会获取旧 token )包含在每个请求中(无论有或没有用户名 - token 应该是唯一可识别的)这样就没有必要了,但也没什么坏处),这意味着在你做任何事情之前,你必须调用登录 API(当然不需要 token )来获取一个 token ,然后再做任何事情。
您可能希望在每次使用时刷新 token 的过期时间(空闲超时),否则您需要让您的客户知道他们可能需要每隔一段时间刷新一次 token (即获取一个新 token )(这比空闲超时更安全)。
关于php - RESTful API 身份验证流程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25917860/