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

OAuth2 RestClient获取Token失败但Postman可正常获取的问题求助

问题排查与解决方法
  • 缺失核心必填参数
    Authorization Code授权码模式兑换访问令牌时,必须携带此前从授权端点获取到的code参数值,你的代码中完全未添加该参数,这是触发授权失败的核心原因之一。
  • 参数命名与取值不符合OAuth2标准规范
    OAuth2标准定义的令牌接口参数均为小写格式,你的代码中参数名和取值都存在错误:
    • Grant_Type需改为grant_type,取值需改为authorization_code(全小写,中间用下划线连接,不能带空格)
    • Client_ID需改为client_id
    • Client_Secret需改为client_secret
    • Callback_URL需改为redirect_uri
    • Scope需改为scope
    • 令牌接口不需要传递Auth_URL参数,可直接删除该参数
  • 客户端认证方式不匹配
    你在Postman中配置的客户端认证方式为Send as Basic Auth header,该模式要求你将client_id:client_secret拼接后的字符串做Base64编码,再放到请求头Authorization: Basic 编码后的值中,你当前代码将客户端ID、密钥放在请求体中传递,不符合认证要求,会直接触发401未授权错误。
  • 参数一致性校验
    需确认redirect_uri的取值和你此前请求授权码时传递的回调地址完全一致,包括路径、参数、末尾斜杠都不能有差异,否则也会导致授权失败。

修正后代码参考

// 构造Basic Auth认证头
string clientId = "你的客户端ID";
string clientSecret = "你的客户端密钥";
string authHeaderValue = Convert.ToBase64String(Encoding.UTF8.GetBytes($"{clientId}:{clientSecret}"));

var client = new RestClient("https://id.sage.com/oauth/token");
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", $"Basic {authHeaderValue}");
request.AddHeader("cache-control", "no-cache");
request.AddHeader("content-type", "application/x-www-form-urlencoded");
// 替换为你实际获取到的授权码code值
request.AddParameter("grant_type", "authorization_code");
request.AddParameter("code", "你从授权接口拿到的authorization_code值");
request.AddParameter("redirect_uri", "https://dummyaddress");
request.AddParameter("scope", "openid profile email offline_access");
IRestResponse response = client.Execute(request);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 23:15:01