如何配置Scalar通过Microsoft Entra实现身份认证?
问题:配置Scalar与Microsoft Entra认证对接,测试需认证API
我有一个Web应用,前端使用Microsoft Entra进行身份认证,通过获取的Bearer令牌与后端API完成认证。近期我移除了应用中的Swagger/SwaggerUI,替换为Microsoft OpenAPI包和Scalar的ASP.NET包——因为原Swagger无法完全正常工作,所以尝试这些现代替代方案。
Scalar可以正常启动,我能查看所有后端API并发送请求,但它默认不支持身份认证功能,导致所有对需认证API的请求(部分API允许匿名访问)均返回401响应。
我希望配置OpenAPI/Scalar,让它识别哪些API需要认证,并实现类似之前SwaggerUI的认证流程:点击按钮即可触发Entra认证,后续测试API时自动完成认证。之前任职的公司里有人实现过SwaggerUI的该功能,但我不清楚具体配置方法,想在Scalar上复现。
这是为所在俱乐部搭建的个人非商用网站,仅作兴趣使用(无付费)。技术栈为ASP.NET Core 9 Web API后端 + Blazor WebAssembly前端(前端已能正常完成认证)。目前找不到相关配置指南,不确定是该功能无法实现还是方案较新导致资料较少。
已解决:Scalar与Entra认证对接的配置步骤
按照相关方案操作后,我成功实现了Scalar与Entra的认证对接,除基础配置外,还额外完成了以下关键步骤:
- 在Entra的应用注册中添加Scalar的重定向URL
- 应用注册提供的认证和令牌端点默认以
https://login.microsoftonline.com/common开头,实际需要使用包含租户ID的端点(参考MSAL使用的端点格式)
OpenAPI核心配置代码
builder.Services.AddOpenApi(options => { options.AddDocumentTransformer((document, context, cancellationToken) => { document.Components ??= new OpenApiComponents(); document.Components.SecuritySchemes.Add("oauth", 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 = new Dictionary<string, string> { {builder.Configuration["AzureAd:Scopes"], "Data Access"} }, // 让Scalar默认选择PKCE,可选值为 'SHA-256' | 'plain' | 'no' Extensions = new Dictionary<string, IOpenApiExtension>() { ["x-usePkce"] = new OpenApiString("SHA-256") } } } }); return Task.CompletedTask; }); });
内容的提问来源于stack exchange,提问作者Mog0
相关产品推荐
相关产品推荐

