JsonApiClient配置JWT Bearer Token遇403问题及解决方法
JsonApiClient 设置 Bearer Token 遇 403 未授权的解决方案
问题背景
用 IdentityModel 的 IClientAccessTokenManagementService 获取客户端授权的 JWT 令牌后,给 ServiceStack 的 JsonApiClient 设置 BearerToken 时,所有请求均返回 403 未授权错误。对比测试发现:JsonServiceClient 设置同个令牌可正常请求,但 ServiceStack 文档又推荐使用 JsonApiClient;同时 JsonApiClient 不支持 CaptureHttp 功能,无法排查请求是否携带了正确的令牌。
解决办法
绕过 JsonApiClient 自带的 BearerToken 属性,直接为其底层的 HttpClient 手动添加 Authorization 请求头部:
// 从 IdentityModel 获取客户端授权的 JWT 令牌 var accessToken = await _clientAccessTokenManagement.GetAccessTokenAsync(); // 初始化 JsonApiClient var jsonApiClient = new JsonApiClient("https://your-api-endpoint.com"); // 直接为底层 HttpClient 设置 Bearer Token jsonApiClient.HttpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
问题根因
JsonServiceClient 与 JsonApiClient 处理 Bearer Token 的逻辑存在差异:
JsonServiceClient的BearerToken属性会自动将令牌注入到请求的 Authorization 头部,逻辑正常JsonApiClient的同名属性未正确实现令牌注入逻辑,导致请求未携带有效授权信息,触发服务端 403 未授权拦截
内容的提问来源于stack exchange,提问作者MADCookie
相关产品推荐
相关产品推荐

