登录
/
注册
首页
论坛
其它
首页
科技
业界
安全
程序
广播
Follow
关于
导读
排行榜
资讯
发帖说明
登录
/
注册
账号
自动登录
找回密码
密码
登录
立即注册
搜索
搜索
关闭
CSDN热搜
程序园
精品问答
技术交流
资源下载
本版
帖子
用户
软件
问答
教程
代码
写记录
写博客
小组
VIP申请
VIP网盘
网盘
联系我们
发帖说明
道具
勋章
任务
淘帖
动态
分享
留言板
导读
设置
我的收藏
退出
腾讯QQ
微信登录
1
2
/ 2 页
下一页
返回列表
首页
›
资源区
›
代码
›
PHP转Go系列 | ThinkPHP与Gin框架之OpenApi授权设计实践 ...
PHP转Go系列 | ThinkPHP与Gin框架之OpenApi授权设计实践
[ 复制链接 ]
党新苗
2025-6-4 14:14:17
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
大家好,我是码农先森。
我之前待过一个做 ToB 业务的公司,主要是研发以会员为中心的 SaaS 平台,其中涉及的子系统有会员系统、积分系统、营销系统等。在这个 SaaS 平台中有一个重要的角色「租户」,这个租户可以拥有一个或多个子系统的使用权限,此外租户还可以使用平台所提供的开放 API 「即 OpenApi」来获取相关系统的数据。有了 OpenApi 租户可以更便捷的与租户自有系统进行打通,提高系统之间数据的传输效率。那么这一次实践的主要内容是 OpenApi 的授权设计,希望对大家能有所帮助。
我们先梳理一下本次实践的关键步骤:
给每一个租户分配一对 AppKey、AppSecret。
租户通过传递 AppKey、AppSecret 参数获取到平台颁发的 AccessToken。
租户再通过 AccessToken 来换取可以实际调用 API 的 RefreshToken。
这时的 RefreshToken 是具有时效性,目前设置的有效期为 2 个小时。
针对 RefreshToken 还会提供一个刷新时效的接口。
只有 RefreshToken 才有调用业务 API 的真实权限。
有些朋友对 AccessToken 和 RefreshToken 傻傻分不清,疑问重重?我在最开始接触这个设计的时候也是懵逼的,为啥要搞两个,一个不也能解决问题吗?确实搞一个也可以用,但大家如果对接过微信的开放 API 就会发现他们也是有两个,此外还有很多大的开放平台也是采用类似的设计逻辑,所以存在即合理。
这里我说一下具体的原因,AccessToken 是基于 AppKey 和 AppSecret 来生成的,而 RefreshToken 是通过 AccessToken 交换得来的。并且 RefreshToken 具备有效性,需要通过一个刷新接口,不定时的刷新 RefreshToken。RefreshToken 的使用是最频繁的,在每次的业务 API 调用是都需要进行传输,传输的次数多了那么 RefreshToken 被劫持的风险就会变大。假设 RefreshToken 真的被泄露,那么损失也是控制在 2 个小时以内,为了减低损失也还可以调低有效时间。总而言之,网络的传输并不总是能保证安全,AccessToken 在网络上只需要一次传输「即换取 RefreshToken」,而 RefreshToken 需要不断的在网络的传输「即不断调用业务 API」,传输的次数越少风险就越低,这就是设计两个 Token 的根本原因。
话不多说,开整!
按照惯例,我们先对整个目录结构进行梳理。这次的重点逻辑主要是在控制器 controller 的 auth 中实现,包含三个 API 接口一是生成 AccessToken、二是通过 AccessToken 交换 RefreshToken,三是刷新 RefreshToken。中间件 middleware 的 api_auth 是对 RefreshToken 进行解码验证,判断客户端传递的 RefreshToken 是否有效。此外,AccessToken 和 RefreshToken 的生成策略都是采用的 JWT 规则。
[manongsen@root php_to_go]$ tree -L 2
.
├── go_openapi
│ ├── app
│ │ ├── controller
│ │ │ ├── auth.go
│ │ │ └── user.go
│ │ ├── middleware
│ │ │ └── api_auth.go
│ │ ├── model
│ │ │ └── tenant.go
│ │ ├── config
│ │ │ └── config.go
│ │ └── route.go
│ ├── go.mod
│ ├── go.sum
│ └── main.go
└── php_openapi
│ ├── app
│ │ ├── controller
│ │ │ ├── Auth.php
│ │ │ └── User.php
│ │ ├── middleware
│ │ │ └── ApiAuth.php
│ │ ├── model
│ │ │ └── Tenant.php
│ │ └── middleware.php
│ ├── composer.json
│ ├── composer.lock
│ ├── config
│ ├── route
│ │ └── app.php
│ ├── think
│ ├── vendor
│ └── .env
复制代码
ThinkPHP
使用 composer 创建 php_openapi 项目,并且安装 predis、php-jwt 扩展包。
[manongsen@root ~]$ pwd
/home/manongsen/workspace/php_to_go/php_openapi
[manongsen@root php_openapi]$ composer create-project topthink/think php_openapi
[manongsen@root php_openapi]$ cp .example.env .env
[manongsen@root php_openapi]$ composer require predis/predis
[manongsen@root php_openapi]$ composer require firebase/php-jwt
复制代码
使用 ThinkPHP 框架提供的命令行工具 php think 创建控制器、中间件、模型文件。
[manongsen@root php_openapi]$ php think make:model Tenant
Model:app\model\Tenant created successfully.
[manongsen@root php_openapi]$ php think make:controller Auth
Controller:app\controller\Auth created successfully.
[manongsen@root php_openapi]$ php think make:controller User
Controller:app\controller\User created successfully.
[manongsen@root php_openapi]$ php think make:middleware ApiAuth
Middleware:app\middleware\ApiAuth created successfully.
复制代码
在 route/app.php 文件中定义接口的路由。
[code]
PHP
Go
系列
ThinkPHP
Gin
相关帖子
OpenCalw系列---【OpenClaw如何接入飞书?】
Go - Zerolog使用入门
OpenCode系列---【OpenCode接入白山智算模板】
OpenCode系列---【OpenCode接入白山智算模板】
OpenCode系列---【OpenCode接入白山智算模板】
开源 | ChatClaw Go语言开发的openclaw龙虾智能体
在 PHP 中写真正的异步代码 TrueAsync 0.6.0 已支持数据库链接池
解锁小米8EG5系列机型的注意事项
GoChatIAI -Go语言AI应用服务平台(2)
GoChatIAI -Go语言AI应用服务平台(3)
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
千斤顶
照妖镜
相关推荐
安全
OpenCalw系列---【OpenClaw如何接入飞书?】
0
929
晌集涟
2026-03-10
业界
Go - Zerolog使用入门
0
1027
仰翡邸
2026-03-11
业界
OpenCode系列---【OpenCode接入白山智算模板】
0
1007
夔新梅
2026-03-11
业界
OpenCode系列---【OpenCode接入白山智算模板】
0
746
屋稷删
2026-03-11
业界
OpenCode系列---【OpenCode接入白山智算模板】
0
60
齐娅晶
2026-03-11
业界
开源 | ChatClaw Go语言开发的openclaw龙虾智能体
0
325
寿爹座
2026-03-12
业界
在 PHP 中写真正的异步代码 TrueAsync 0.6.0 已支持数据库链接池
0
26
步雪卉
2026-03-14
业界
解锁小米8EG5系列机型的注意事项
0
512
染悄
2026-03-17
业界
GoChatIAI -Go语言AI应用服务平台(2)
0
393
陆菊
2026-03-17
安全
GoChatIAI -Go语言AI应用服务平台(3)
0
35
挺喽蹂
2026-03-17
回复
(33)
蒙飘
2025-12-13 16:33:16
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
分享、互助 让互联网精神温暖你我
峰邑
2025-12-23 18:09:13
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
感谢分享,下载保存了,貌似很强大
腥狩频
2025-12-24 21:33:52
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
懂技术并乐意极积无私分享的人越来越少。珍惜
喳谍
2026-1-6 23:16:34
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
这个好,看起来很实用
当贵
2026-1-8 00:28:20
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
东西不错很实用谢谢分享
套缈
2026-1-14 06:31:51
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
谢谢分享,辛苦了
替攀浮
2026-1-19 10:12:32
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
谢谢分享,试用一下
卓卞恻
2026-1-19 11:37:18
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
谢谢楼主提供!
习和璧
2026-1-21 20:43:54
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
不错,里面软件多更新就更好了
明思义
2026-1-27 03:04:27
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
喜欢鼓捣这些软件,现在用得少,谢谢分享!
莘度
2026-1-27 14:02:09
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
收藏一下 不知道什么时候能用到
褐洌
2026-1-27 14:32:06
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
这个好,看起来很实用
沃盼盼
2026-1-28 08:13:27
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
用心讨论,共获提升!
益竹月
2026-1-28 09:16:44
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
收藏一下 不知道什么时候能用到
松菊
2026-1-30 05:22:21
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
收藏一下 不知道什么时候能用到
骆贵
2026-2-2 02:46:21
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
不错,里面软件多更新就更好了
啪炽
2026-2-4 09:32:13
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
很好很强大 我过来先占个楼 待编辑
兼罔
2026-2-6 11:21:01
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
热心回复!
丘奕奕
2026-2-6 13:01:18
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
感谢发布原创作品,程序园因你更精彩
下一页 »
1
2
/ 2 页
下一页
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
回复
本版积分规则
回帖并转播
回帖后跳转到最后一页
浏览过的版块
程序
安全
业界
科技
签约作者
程序园优秀签约作者
发帖
党新苗
2026-2-6 13:01:18
关注
0
粉丝关注
17
主题发布
板块介绍填写区域,请于后台编辑
财富榜{圆}
3934307807
991125
anyue1937
9994892
kk14977
6845359
4
xiangqian
638210
5
神泱
9522
6
韶又彤
9916
7
宋子
9878
8
荪俗
9018
9
闰咄阅
9995
10
蓬森莉
9870
查看更多
今日好文热榜
583
largebin attack与house of storm
352
智能体组织研发范式变革
810
智能体组织研发范式变革
858
使用小龙虾来操作猿编程的遥控车
400
图片防御与lvlm攻击论文阅读笔记
624
图片防御与lvlm攻击论文阅读笔记
119
二分查找力扣题(leetcode)
79
3分钟部署本地大模型,零成本实现 Token 自
197
Electron41+Vite8.0+DeepSeek桌面端AI助手|
676
OPUS编解码器在audio DSP上的移植和应用
471
SpringCloud进阶--Seata与分布式事务
989
大模型私有化部署指南:从“一键安装”到“
626
大模型私有化部署指南:从“一键安装”到“
886
SpringCloud进阶--Seata与分布式事务
172
SpringCloud进阶--Seata与分布式事务
786
Oracle SQL经典练习50题 | 附答案
206
gitru:一个由 Rust 打造的零依赖 Git 提交
930
gitru:一个由 Rust 打造的零依赖 Git 提交
267
gitru:一个由 Rust 打造的零依赖 Git 提交
856
gitru:一个由 Rust 打造的零依赖 Git 提交