php - RESTful API 身份验证流程

标签 php angularjs rest laravel

过去一个小时我一直在堆栈溢出上研究这个主题,所以我想我只想问我所有的具体问题。我正在构建一个 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/

相关文章:

java - Servlet 与 REST

php - 检查字符串是否包含任何指定的单词并将其删除

angularjs - 在angularjs中跨多个 Controller 更新范围变量

php - 使用 mysql_fetch_array 打印逗号分隔的字符串和 mysql_num 来计数

json - 如何通过AngularJS路由保存数据?

jquery-ui - 重新排序 angularfire 支持列表的项目,拖放样式

rest - 什么是JAX-RS实现?

java - Spring Boot Rest 中的 Jersey 名称绑定(bind)技术

PHP以真实二进制读取二进制文件

php - 变量字符串中的换行符