.NET 5 Web API配Azure AD后Swagger授权仍报未授权问题求解
解决Swagger对接Azure AD授权报错问题
1. 修复Scope缺失报错
你遇到的「请求必须包含Scope参数」错误,是因为当前Swagger的OAuth2配置未指定授权所需的Scope,按如下步骤修改:
- 首先在Azure AD应用注册界面为你的Web API暴露自定义Scope,示例格式为
api://<你的API应用Client ID>/access_as_user - 修改
AddSwaggerGen中的安全定义配置,给Implicit流添加Scopes属性,同时新增安全要求配置,让Swagger在请求受保护接口时自动携带Bearer token:
services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new OpenApiInfo { Title = "MyProject", Version = "v1.0.0" }); c.AddSecurityDefinition("oauth2", new OpenApiSecurityScheme { Type = SecuritySchemeType.OAuth2, Flows = new OpenApiOAuthFlows() { Implicit = new OpenApiOAuthFlow() { AuthorizationUrl = new Uri($"https://login.microsoftonline.com/{Configuration["TenantId"]}/oauth2/v2.0/authorize"), TokenUrl = new Uri($"https://login.microsoftonline.com/{Configuration["TenantId"]}/oauth2/v2.0/token"), // 新增Scope配置,key为你暴露的Scope地址,value为Scope的描述文本 Scopes = new Dictionary<string, string> { { "api://<你的API应用Client ID>/access_as_user", "访问Web API" } } } } }); // 新增安全要求,绑定OAuth2安全方案 c.AddSecurityRequirement(new OpenApiSecurityRequirement { { new OpenApiSecurityScheme { Reference = new OpenApiReference { Type = ReferenceType.SecurityScheme, Id = "oauth2" } }, new[] { "api://<你的API应用Client ID>/access_as_user" } } }); });
2. 预配置Client ID避免手动输入
你可以在Configure方法的Swagger UI配置中预先填入Client ID,无需每次授权手动输入,配置示例如下:
app.UseSwaggerUI(c => { c.SwaggerEndpoint("/swagger/v1/swagger.json", "MyProject v1"); // 新增OAuth配置,预填Client ID,也可直接从配置文件读取 c.OAuthClientId(Configuration["SwaggerClientId"]); // 可选:预填默认选中的Scope,授权时无需手动勾选 c.OAuthScopes("api://<你的API应用Client ID>/access_as_user"); });
3. 额外Azure AD配置检查
确保你Azure AD中用于Swagger授权的客户端应用配置符合要求:
- 「身份验证」页开启隐式流,勾选「访问令牌」「ID令牌」选项
- 重定向URI添加
https://<你的站点域名>/swagger/oauth2-redirect.html - 已给该客户端应用授予你Web API暴露的Scope的访问权限
内容的提问来源于stack exchange,提问作者Sandeep Thomas
相关产品推荐
相关产品推荐

