token - PHP API接口怎么控制权限?
黄舟
黄舟 2017-04-11 09:11:48
[PHP讨论组]

举个例子:

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)
怪我咯

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

大家讲道理

搜索 防跨站攻击 CSRF( Cross-Site-Request-Forgery)

PHP中文网

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

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

怪我咯

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

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号