token - PHP API接口怎么控制权限?

 红糖里有砂 发布于 2022-11-15 22:10

举个例子:

a.com    //我的网站
b.com    //其他网站
a.com/api/getUserName    //我的网站的API,返回user表的所有username

在没有对接口进行权限控制之前,b.com在其站内请求a.com/api/getUserName也能获得数据。
现在我不想让b.com可以请求这个接口拿到数据,度了一下。了解了两个方法:
1.验证referer,据说这个可以被伪造,所以没用;
2.token,说是请求的时候加几个参数:a.com/api/getUserName?a=1&b=2&token=xxxxxxxxxxxxx,
然后服务器将a和b再加上一个密钥进行加密得到一个字符串与客户端传过来的token进行对比即可。
但是其他人可以在访问a.com的时候拿到这样的请求链接,直接复制a.com/api/getUserName?a=1&b=2&token=xxxxxxxxxxxxx,放在b.com的代码里面向a.com的这个api发请求拿到数据?
还是我对这个方式理解有误? 求大牛指点。

4 个回答
  • 如果光是网站作区分,基本都是可以通过伪造成你的网站数据来访问API的,要想对API进行权限控制,像微信SDK这类需要在其平台上成为开发者,拿到独有的KEY和SECRET,然后生成token...这样就可以了

    2022-11-16 00:05 回答
  • 但是其他人可以在访问a.com的时候拿到这样的请求链接,直接复制a.com/api/getUserName?a=1&b=2&token=xxxxxxxxxxxxx,放在b.com的代码里面向a.com的这个api发请求拿到数据?

    题主这个你理解错了,任何人在请求你的接口之前,你需要跟他确认身份,如果该身份是被认可的才生成token,请求借口的时候再次验证token,通过才能请求借口。PHP可以参考JWT

    2022-11-16 00:05 回答
  • 搜索 防跨站攻击 CSRF( Cross-Site-Request-Forgery)

    2022-11-16 00:05 回答
  • 我们是这样做的, 给a和b不同的key, 你传参数的时候需要, 告诉我是a,还是b(parter=1, parter=b),然后校验签名, 不同的parter, 签名是不同的, 然后根据这个来判断用户是a,还是b, 然后到数据库里面判断是否有权限进行当前操作

    2022-11-16 00:05 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有