https://github.com/dxvgef/token
Go语言的访问令牌开发包,可用于 session 或 access token 两种模式的应用场景
https://github.com/dxvgef/token
access-control access-management access-token authentication session token-authetication
Last synced: 10 months ago
JSON representation
Go语言的访问令牌开发包,可用于 session 或 access token 两种模式的应用场景
- Host: GitHub
- URL: https://github.com/dxvgef/token
- Owner: dxvgef
- Created: 2018-02-08T08:49:10.000Z (almost 8 years ago)
- Default Branch: master
- Last Pushed: 2025-03-05T18:16:47.000Z (11 months ago)
- Last Synced: 2025-03-28T11:39:37.732Z (10 months ago)
- Topics: access-control, access-management, access-token, authentication, session, token-authetication
- Language: Go
- Homepage:
- Size: 71.3 KB
- Stars: 3
- Watchers: 2
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# dxvgef/token
`Go`语言的访问令牌开发包,可应用于 Session Cookie 或 OAuth 等多种场景
## 特点
- 令牌可存储荷载内容
- 令牌可定义客户端的IP和指纹信息,用于在校验令牌的同时验证客户端有效性
- 用自定义回调函数生成和校验令牌字符串,方便使用各种算法
- 可限制每个令牌的生命周期的刷新次数
- 使用`Redis`协议兼容的服务端存储令牌数据
## 应用场景
### Session Cookie 模式
创建一个旧短生命周期的令牌作为会话ID,写入到客户端 Cookie。
服务端使用`Token.Valid()`验证令牌有效性。
可用以下两种方案保持会话存活:
1. 使用`Token.Refresh()`方法延长令牌的生命周期
2. 销毁当前令牌,并创建一个同样荷载内容的新令牌,发给客户端替换原来的令牌
### OAuth 模式
先创建一个生命周期较长的令牌,作为刷新令牌(refreshToken)。
然后使用刷新令牌的`MakeChildToken()`方法创建一个生命周期较短的子令牌,作为访问令牌(accessToken)
当访问令牌到期,客户端将访问和刷新令牌都发到服务端进行校验。
服务端校验刷新令牌有效,并且校验其子令牌与提交的访问令牌是否匹配
校验都通过后,使用`Manager.DestroyToken(refreshToken, true)`或者`refreshToken.Destroy(true)`将当前的两个令牌都销毁
最后重新创建一对新令牌,发给客户端替换原来的令牌
## 方法列表
### 管理器 (Manager)
- `NewManager()` 创建令牌管理器实例,必须传入`github.com/redis/go-redis`的`*Client`类型的变量
- `ManagerOptions.MakeTokenFunc()` 管理器创建令牌字符串的回调函数
- `ManagerOptions.CheckTokenFunc()` 管理器校验令牌字符串的回调函数
- `Manager.MakeToken()` 创建令牌
- `Manager.ParseToken()` 将字符串解析成令牌
- `Manager.DestroyToken()` 销毁指定的令牌,可同时销毁子令牌
### 令牌 (Token)
- `MakeChildToken()` 创建子令牌
- `Destroy()` 销毁当前令牌,可同时销毁子令牌
- `Refresh()` 刷新生命周期
- `Set()` 设置荷载中的键值
- `Value()` 获取令牌的字符串
- `Get()` 获取荷载的指定键的数据
- `GetFields()` 获取荷载的多个键的数据
- `GetAll()` 获取荷载的所有数据,可包含令牌的元信息(_开头的字段)
- `CreatedAt()` 获取创建时间
- `ExpiresAt()` 获取到期时间
- `TTL()` 获取TTL值
- `RefreshedAt()` 获取最后刷新时间
- `RefreshedCount()` 获取刷新次数
- `RefreshLimit()` 获取刷新上限制
- `IP()` 获取绑定的客户端IP
- `Fingerprint()` 获取绑定的客户端指纹信息
- `ChildToken()` 获取子令牌
- `ValidateIP()` 验证IP是否匹配
- `ValidateFingerprint` 验证指纹是否匹配
- `IsUnexpired()` 未过期