API 簡易的 token 驗證?

火爆浪子
  • 2.8k

前端是沒有任何需要登入的機制 也不需要驗證會員身份
只是我想讓 API 安全些
我如何在後端做個簡易的驗證
確認前端來的請求都是合法的?
而不能讓任何站點都可以請求這個 API(API的功能只有送前端的數據去數據庫紀錄而已)
只限於我指定的這個站點
我前端是 Vue
後端 php slim 框架

回复
阅读 603
6 个回答

方法蛮多的,这里主要说一下简单 Token 的实现吧。

创建一个独特的 Token 生成算法:

密钥 + 时间戳 + 随机数

生成一个独特的 Token, 用 MD5、Base64 之类的算法随便一加密(最终建议用MD5)

比如说:

md5(@MyProject{TimeStapm}$base64({RandomNumber}))

验证的时候就直接通过相同的数据来加密并检查(随机数别太大,可以遍历一下)

简而言之:一些可知的数据 + 各种的加密方法。

按你的需求:1、不用登录系统;2、不想让任何站点随意访问你的API;3、让你的API安全一下。
如果是我,我会从这些方面着手:
1、不允许跨域访问;
2、通过请求的referer来拦截“非法请求”;
3、设置请求ip的白名单;
4、请求中加一个随机参数,这个参数规则写死在后端,只有你自己知道,每次请求都带上这个参数,如果这个参数错误则请求失败。

总而言之把当前站点的特定信息(如ip 地址)+时间序列 通过特定的加密方式写在 http header里,后端验证http header来判断是否记录数据库。

不出现在URL中,但需要浏览器传递,可以考虑出现在请求的header部分,比如session信息就可以的,只是这要求api页面不是直接的最初页面,需要前面通过网站上的其它页面后带上session信息,这样后面就可以在api请求时进行验证吧。

上面是我的一个思路,没有验证的。

而不能讓任何站點都可以請求這個 API
这一点是不可能做到的.
只能减少可能性. 在服务器生成一些按时间变化的参数, 放到http header中.

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
你知道吗?

宣传栏