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

C#调用OAuth2接口获取AccessToken返回401未授权错误如何解决

OAuth2授权码模式获取AccessToken返回401错误排查方案

首要排查点(代码明显问题)

你代码中存在变量名大小写不匹配的问题:
你定义的重定向地址变量是redirectURL(全大写URL),但传入请求字典的是redirectUrl(小写Url),C#为大小写敏感语言,该问题会直接导致传入的redirect_uri值为空/错误,这是触发401的高频原因。

其他常规排查项

  • redirect_uri完全匹配校验
    OAuth2规范要求兑换Token时传入的redirect_uri必须与此前获取Authorization Code时传给授权服务的重定向地址完全一致,包括域名大小写、端口、路径、查询参数、末尾斜杠所有细节。你当前的重定向地址携带了随机session参数puyofuga123,需确认两次请求的该参数值完全相同,同时要确认该地址已在对应API服务商的开发者后台完成白名单登记。
  • 凭证与授权码有效性校验
    • 确认client_id、client_secret复制无错误,无前后多余空格、大小写错误,部分服务商的client_secret为大小写敏感
    • 确认code为未使用过的有效授权码:授权码有效期通常仅为1-5分钟,且单次使用即失效,不可重复提交兑换
  • 请求认证方式校验
    部分OAuth2服务商不支持将client_id、client_secret放在表单参数中提交,要求使用Basic Auth放在请求头中认证,格式为:
    Authorization: Basic Base64编码(client_id:client_secret)
    对应C#调整代码示例:
    // 构造Basic认证头
    var credentialBytes = Encoding.UTF8.GetBytes($"{CLIENT_ID}:{CLIENT_SECRET}");
    httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", Convert.ToBase64String(credentialBytes));
    // 此时可以从请求字典中移除client_id、client_secret两个参数
    

排查辅助方法

可以先通过Postman等工具模拟当前请求,依次替换参数验证,定位是参数错误还是代码逻辑错误,也可以捕获返回的响应体内容,多数OAuth2服务会在401的响应体中返回具体错误原因(比如invalid_grant、invalid_client等错误码),可以快速定位问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 00:36:02