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

SwaggerUI配置AzureAD PKCE授权码流报AADSTS700025错误求助

问题根因

触发AADSTS700025报错与应用清单中allowPublicClient的配置值无关,核心原因是Azure AD判定客户端类型时,重定向URI所属平台的优先级高于清单字段配置:

  • 只要重定向URI被配置在「单页应用(SPA)」平台下,Azure AD会强制将对应回调路径的请求识别为公共客户端,无论allowPublicClient设置为何值,都禁止请求携带client_assertion或client_secret,这就是配置不生效的根本原因。
  • SPA平台本身是为无法安全存储密钥的浏览器端公共客户端设计的,OAuth 2.0规范中这类客户端本身就不应持有client_secret,Azure AD在平台层做了强制拦截,没有绕过空间。
落地解决方案

要实现强制校验client_secret的机密客户端Authorization Code + PKCE流程,按以下步骤调整配置即可:

  • 调整Azure AD应用注册配置
    1. 进入ClientAPP的认证配置页,删除之前添加在SPA平台下的Swagger重定向URI
    2. 在「Web」平台配置中添加Swagger重定向URI,格式通常为https://<你的API服务域名>/swagger/oauth2-redirect.html;如果需要兼容Postman调试,直接把Postman的回调地址也加到Web平台的重定向URI列表即可,无需单独配置其他平台
    3. 进入ClientAPP的「证书和密码」页面,新建一个客户端密钥,复制保存密钥值备用
  • 调整.NET Core项目的Swagger配置
    在服务注册和中间件配置阶段,显式开启PKCE并传入客户端密钥,参考配置代码如下:
    // Program.cs 服务注册部分
    builder.Services.AddSwaggerGen(options =>
    {
        // 省略Swagger文档生成、分组等其他配置
        options.AddSecurityDefinition("AzureADOAuth", new OpenApiSecurityScheme
        {
            Type = SecuritySchemeType.OAuth2,
            Flows = new OpenApiOAuthFlows
            {
                AuthorizationCode = new OpenApiOAuthFlow
                {
                    AuthorizationUrl = new Uri($"https://login.microsoftonline.com/{builder.Configuration["AzureAd:TenantId"]}/oauth2/v2.0/authorize"),
                    TokenUrl = new Uri($"https://login.microsoftonline.com/{builder.Configuration["AzureAd:TenantId"]}/oauth2/v2.0/token"),
                    Scopes = {
                        // 替换为你HostAPP暴露的委托权限,格式为 api://<HostAPP客户端ID>/<Scope名称>
                        { builder.Configuration["AzureAd:ApiScope"], "API访问权限" }
                    }
                }
            }
        });
        // 省略安全需求配置
    });
    
    // 中间件配置部分
    app.UseSwaggerUI(options =>
    {
        options.OAuthClientId(builder.Configuration["AzureAd:ClientId"]);
        // 关键配置:显式传入客户端密钥
        options.OAuthClientSecret(builder.Configuration["AzureAd:ClientSecret"]);
        // 启用PKCE
        options.OAuthUsePkce();
        options.OAuthScopeSeparator(" ");
    });
    
  • 验证结果
    重启服务后在Swagger UI发起授权,抓包查看token请求会发现请求体已携带client_secret参数,Azure AD不再返回AADSTS700025错误,可正常获取访问令牌,且服务端会强制校验client_secret合法性。
补充说明
  • Authorization Code + PKCE不是SPA专属流程,机密客户端场景下开启PKCE搭配client_secret做双重校验,是当前OAuth2.1规范推荐的高安全配置,完全符合标准。
  • 不要尝试在SPA平台配置下强制传client_secret绕过校验,平台层面的规则限制无法通过配置修改绕过。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 15:15:34