.NET Core 8后台作业通过JWT授权调用第三方Web API的方案设计咨询
服务间后台作业的JWT授权方案
一、标准推荐:客户端凭证流
- 在Keycloak中为服务2创建独立的OpenID客户端,开启客户端凭证流,并配置服务3所需的权限(如专属角色或scope)。
- 服务2的后台作业启动时,通过该客户端的
client_id和client_secret向Keycloak请求访问令牌,拿到令牌后在请求头中携带Authorization: Bearer <token>调用服务3的API。 - 服务3验证令牌的签发机构、受众以及权限匹配后,允许访问。
- 优点:完全贴合OAuth2标准,权限管控清晰,服务间解耦,所有凭证和权限由Keycloak统一管理,便于维护和审计。
二、需关联用户上下文的场景
如果后台作业是由特定用户触发,且服务3需要验证该用户的权限,可选择以下两种方式:
- 存储并刷新用户令牌:服务2在接收用户触发作业的请求时,加密存储用户的refresh token(需确保令牌支持刷新)。后台作业执行时,用refresh token向Keycloak换取新的access token,再调用服务3。注意要做好令牌的加密存储和过期处理。
- 代理令牌流(On-Behalf-Of):若Keycloak支持OBO流,服务2可使用用户的access token向Keycloak申请一个代表该用户访问服务3的令牌。这种方式无需存储refresh token,但需在Keycloak中配置服务2具备申请代理令牌的权限。
三、简化方案(仅适用于低风险内部系统)
如果是信任度极高的内部小系统,可考虑使用共享API密钥:服务2和服务3约定密钥,服务2调用时在请求头携带密钥,服务3直接验证密钥有效性。但该方式缺乏细粒度权限管控,不符合安全规范,不推荐用于生产环境。
内容的提问来源于stack exchange,提问作者Sam
相关产品推荐
相关产品推荐

