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

使用HttpClient调用connect/token换令牌遇授权码缺失错误排查

问题原因及解决办法

核心问题:参数键的多余空格

你代码里的参数字典中,"code "这个键后面多了一个空格:

{ "code ", code },

认证服务(比如IdentityServer)只认无空格的code作为授权码参数的键,带空格的code 会被当成无关参数,所以服务端找不到有效的授权码,才会抛出“Authorization code is missing”错误。看日志里的Raw部分也能明确看到这个带空格的键:"code ": "8265CBAE...",这就是问题根源。

日志里的RefreshToken显示无需在意

日志里出现的RefreshToken: "********"是服务端日志模板的默认字段,你用的是authorization_code授权类型,实际并没有传refresh_token,属于日志误显示,不用处理。

修复后的代码

把code参数键的空格去掉即可:

private void GetToken(string code)
{
    Dictionary<string, string> parameters = new Dictionary<string, string>
    {
        { "client_id", "my_client" },
        { "grant_type", "authorization_code" },
        { "code", code }, // 移除了键名后的空格
        { "code_verifier", _code_verifier },
        { "redirect_uri", "http://localhost:7920/callback" }
    };
    FormUrlEncodedContent urlEncodedParameters = new FormUrlEncodedContent(parameters);

    using (HttpClient httpClient = new HttpClient())
    {
        string credential = $"{UrlEncode("my_client")}:{UrlEncode(string.Empty)}";
        string foo = Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(credential));

        httpClient.DefaultRequestHeaders.Add("Authorization", "Basic " + foo);
        HttpResponseMessage msg = httpClient.PostAsync("https://localhost:5000/connect/token", urlEncodedParameters).Result;
    }
}

另外注意:你手动请求里的client_id是my_client,但IdentityModel示例里是truth_lite_adviser,如果这不是笔误,要确保和认证服务配置的客户端ID一致,避免后续出现其他问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 10:05:20