You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用JwtSecurityToken配合HttpClient发起OpenApi鉴权请求的问题

问题根因及解决方案

你遇到的403问题核心是参数类型使用错误,接口的Bearer认证仅要求传入原始的三段式JWT字符串,不需要额外做Base64/URL编码操作,原始JWT本身已经是URL安全的编码格式,额外编码反而会导致服务端解析失败。

两种可用实现方案

  • 方案1:调整方法入参,直接传入原始JWT字符串
    你之前传给ValidateCurrentToken方法的string类型token就是可以直接使用的原始串,修改代码如下:
    // 将入参从JwtSecurityToken改为原始token字符串
    public async Task<HttpResponseMessage> GetResponse(HttpClient httpClient, Uri uri, string rawToken)
    {
        HttpRequestMessage httpRequestMessage = new HttpRequestMessage();
        // 直接传入原始token即可,无需额外处理
        httpRequestMessage.Headers.Authorization = new AuthenticationHeaderValue("Bearer", rawToken);
        httpRequestMessage.Method = HttpMethod.Get;
        httpRequestMessage.RequestUri = uri;
        return await httpClient.SendAsync(httpRequestMessage);
    }
    
  • 方案2:保留现有入参,调用RawData属性获取原始串
    如果你不能修改方法入参结构,直接取JwtSecurityToken对象自带的RawData属性即可获取原始JWT字符串:
    public async Task<HttpResponseMessage> GetResponse(HttpClient httpClient, Uri uri, JwtSecurityToken token)
    {
        HttpRequestMessage httpRequestMessage = new HttpRequestMessage();
        // RawData属性存储的就是未做任何修改的原始三段式JWT串
        httpRequestMessage.Headers.Authorization = new AuthenticationHeaderValue("Bearer", token.RawData);
        httpRequestMessage.Method = HttpMethod.Get;
        httpRequestMessage.RequestUri = uri;
        return await httpClient.SendAsync(httpRequestMessage);
    }
    

校验小技巧:如果修改后依然报错,可以把生成的Authorization头完整值打印出来,和你本地校验用的原始token做对比,排查是否存在多余空格、特殊字符转义的问题。

内容的提问来源于stack exchange,提问作者evilfish

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 13:36:04