五分钟接入 Access Token 自动管理
对接需要 Access Token 的第三方 API 时,手动管理令牌的获取、缓存与刷新既繁琐又容易出错。本文演示 HttpAgent 的 Access Token 自动管理,五分钟完成接入。H团
HttpAgent 团队
对接微信、飞书、钉钉等开放平台时,绝大多数接口都要求携带 Access Token。而令牌通常有有效期,过期后接口会返回 401,此时需要重新获取令牌并重试——这套逻辑如果手写,每个项目都要重复一遍。
HttpAgent 内置 Access Token 自动管理:自动获取、自动注入、过期自动刷新、401 自动重试,全程无感。
1. 实现令牌提供器#
只需实现 IHttpAccessTokenProvider 接口,告诉框架令牌从哪里来:
public class MyAccessTokenProvider : IHttpAccessTokenProvider{ private readonly string _clientId = "your-app-id"; private readonly string _clientSecret = "your-app-secret"; public async Task<HttpAccessToken> GetAsync(HttpAccessTokenContext context, CancellationToken cancellationToken = default) { // 调用第三方授权接口获取令牌(此处省略具体实现) var token = await FetchTokenAsync(_clientId, _clientSecret); return new HttpAccessToken { Value = token.access_token, ExpiresInSeconds = token.expires_in }; }}2. 注册服务与提供器#
builder.Services.AddHttpRemote();builder.Services.AddSingleton<IHttpAccessTokenProvider, MyAccessTokenProvider>();3. 直接调用接口#
此后所有请求都会自动携带令牌:
var result = await httpRemoteService.GetAsStringAsync("https://api.example.com/user/info");框架会在令牌过期前自动刷新、在收到 401 时自动重试一次,无需任何额外代码。
内置提供器#
针对常见平台,HttpAgent 还内置了开箱即用的提供器:
- 微信开放平台:
WeChatAccessTokenProvider; - Furion 框架:
FurionAccessTokenProvider(自动与框架配置集成)。
小结#
令牌获取、缓存、刷新、注入、重试全部交给框架,业务代码只关心业务本身。多节点部署时框架还提供了分布式令牌共享方案,详见文档中的「多节点集群部署」小节。