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

Azure AD OAuth2认证在IIS Express正常,IIS环境报400错误排查

问题排查与解决方法

1. Scope参数格式错误(最可能的直接原因)

你的代码中scope参数的拼接存在明显错误:

postData += "&scope=openid&20email&20profile"

在application/x-www-form-urlencoded格式中,空格需编码为%20,而&是参数分隔符。当前写法会将scope设为openid,同时额外生成20email和20profile两个无效参数,直接触发Azure AD返回400错误。

修复方式:改为正确的编码格式:

postData += "&scope=openid%20email%20profile"

或更稳妥地对scope值做URL编码:

postData += "&scope=" & HttpUtility.UrlEncode("openid email profile")

2. IIS环境的redirect_uri未在Azure AD应用注册中配置

Azure AD要求获取token时的redirect_uri必须与应用注册中配置的完全一致(包括端口号)。你提到IIS与IIS Express的redirect_uri仅端口不同,大概率是IIS使用的端口对应的地址未添加到Azure AD应用的「认证」→「重定向URI」列表中。

修复方式:

  • 登录Azure门户,找到目标AD应用注册
  • 进入「认证」页面,添加IIS环境对应的完整redirect_uri(例如https://localhost:8080/your-callback-page)
  • 保存配置后重试

3. redirect_uri未做URL编码

代码中直接拼接redirect_uri,若地址包含特殊字符(如路径斜杠、查询参数等),未编码会导致请求格式错误。即使仅端口不同,也需确保整个URI被正确编码。

修复方式:对AuthRedirectUri编码后再拼接:

postData += "&redirect_uri=" & HttpUtility.UrlEncode(AuthRedirectUri)

4. 请求编码方式不匹配

你使用ASCIIEncoding处理请求体,但Azure AD的OAuth接口要求UTF-8编码。ASCII编码可能导致含非ASCII字符的client_id、client_secret等参数乱码,引发400错误。

修复方式:替换为UTF8Encoding:

Dim encoding As New UTF8Encoding()
Dim byteArray As Byte() = encoding.GetBytes(postData)

5. TLS版本过低

IIS环境可能默认使用低版本TLS(如TLS 1.0),而Azure AD已不再支持旧版本TLS,会导致请求被拒绝返回400。

修复方式:创建HttpWebRequest前强制设置TLS 1.2:

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12
Dim httpWReq As HttpWebRequest = DirectCast(WebRequest.Create("https://login.microsoftonline.com/" & TenantID & "/oauth2/v2.0/token"), HttpWebRequest)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 23:45:44