14个版本
0.1.15 | 2022年12月10日 |
---|---|
0.1.14 | 2022年12月10日 |
0.1.2 | 2022年11月29日 |
#510 in 身份验证
每月50次下载
67KB
1.5K SLoC
令牌服务器
为某些元数据集提供一次性访问令牌的服务器
该服务器的目的是提供访问令牌,例如用于Web或REST服务器。
令牌服务器应在受保护的环境中运行,只能从本地网络访问。Web服务器收集一些元数据,这些数据将用于所有随后的Web服务器访问。Web服务器从令牌服务器请求一个新的令牌,并将其包含在向用户的响应中。在用户下一次请求Web服务器时,Web服务器从请求中检索令牌,并向令牌服务器发送更新请求。如果成功,Web服务器可以将元数据以及新的令牌包含在响应中。此过程会为每个随后的用户请求重复进行。如果令牌服务器响应为无效令牌,Web服务器可能会决定将用户重定向到登录页面。
如果有更多状态需要跟踪,例如年份和月份或需要工作的业务单位,Web服务器可以将这些值作为元数据添加到更新请求中,以供令牌服务器使用。令牌服务器将添加或更新到现有令牌的元数据中的键值对。
免责声明:不适合高容量元数据集。我的估计是,它可以很好地扩展到最多10万个元数据项,以及每秒最多1000次交易。要存储更多数据或允许更多流量,似乎使用数据库后端更为合适。
用法
用法
RUST_LOG='tower_http=trace,token_server=debug' cargo run [OPTIONS]
可选参数
-h, --help print this help message
-d, --dump allow for HEAD /dump endpoint to log all metadata
-p, --port PORT Which port to listen on (default: 3666)
-P, --purge-interval PURGE-INTERVAL
What frequency to remove expired tokens, between 1s and 90min (default: 1min)
-t, --token-lifetime TOKEN-LIFETIME
How long does a token remain valid, between 30min and 96h (default: 2h)
REST API
-
POST /token 在请求体中为提供的元数据创建新的令牌
Returns: (text/plain) the new token
-
PUT /token 交换令牌以获取新的一个。可选地添加元数据以更新现有集合中的这些字段
Returns: (application/json) either the new token and it's associated metadata or an error message (see below)
-
DELETE /token 删除令牌及其元数据
Returns: 202 Accepted
-
HEAD /dump 请求服务器将所有元数据和相关的过期时间戳输出到服务器日志
Returns: 202 Accepted
元数据
POST和PUT请求都接受一个JSON主体,该主体必须包含一个"meta"键,该键必须是一个单个JSON对象。
{
"meta": {
"name": "My user",
"year": 2022,
"period": 11
}
}
PUT结果
- 成功时
{
"Ok": {
"token": "XXXX",
"meta": {
"name": "My user",
"year": 2022,
"period": 11
}
}
}
- 出错时
{
"Err": "InvalidToken"
}
依赖关系
~19–29MB
~518K SLoC