如何设置 Swashbuckle 和 Swagger UI 以使用 Open ID Connect Discovery 进行授权(在我的例子中是 Azure AD)?
到目前为止,这是我的(未完全工作的)SwaggerGen 设置,基于/sf/answers/4630359751/:
SwaggerGenOptions c => {
OpenApiInfo apiInfo = new() { /* ...snip... */ };
c.SwaggerDoc("v1", apiInfo);
IncludeXmlFileForSwagger(c);
// Defines the Open ID Connect discovery scheme - see also /sf/answers/4630359751/
OpenApiSecurityScheme mainScheme = new()
{
Type = SecuritySchemeType.OpenIdConnect,
OpenIdConnectUrl = new Uri($"https://login.microsoftonline.com/{myTenantId}/.well-known/openid-configuration"),
};
c.AddSecurityDefinition("OpenIdConnect", mainScheme);
// Adds a reference to the above scheme as required for every API action (we can get more nuanced later) …Run Code Online (Sandbox Code Playgroud) 我正在将具有使用 Swashbuckle 生成的 Swagger 文档的 Web API 从 .NET Framework 迁移到 ASP.NET Core。在新的 AspNetCore 版本中,我使用的是 Swashbuckle.AspNetCore v5.0.0-rc2。
这是一项内部服务,身份验证使用自定义 HTTP 标头中提供的 API 密钥。在 .NET Framework 应用程序中,我将 Swashbuckle 配置为启用我的 API 密钥,如下所示:
c.ApiKey("apiKey")
.Description("My description")
.Name("MyHttpHeaderName")
.In("header);
Run Code Online (Sandbox Code Playgroud)
和
c.EnableApiKeySupport("MyHtpHeaderName", "header);
Run Code Online (Sandbox Code Playgroud)
如何使用 Swashbuckle.AspNetCore v5.0.0-rc2 启用对相同 API 密钥的支持?
我通过搜索找到的大部分信息似乎与 v5.0.0-rc2 之前的 Swashbuckle.AspNetCode 版本有关。
此答案适用于 v5.0.0-rc2,但仅涵盖承载授权,并且似乎与使用自定义 HTTP 标头无关:https : //stackoverflow.com/a/57872872/13087
我正在使用.Net core 3.0开发一些Web Api,并希望将其与SwashBuckle.Swagger集成。它工作正常,但是当我添加JWT身份验证时,它无法按我预期的那样工作。为此,我添加了以下代码:
services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new Microsoft.OpenApi.Models.OpenApiInfo { Title = "My Web API", Version = "v1" });
c.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme
{
Description = "JWT Authorization header using the Bearer scheme. Example: \"Authorization: Bearer {token}\"",
Name = "Authorization",
In = ParameterLocation.Header,
Type = SecuritySchemeType.ApiKey
});
});
Run Code Online (Sandbox Code Playgroud)
添加AddSecurityDefinition功能后,我可以看到“授权”按钮,当我单击它时,会看到以下表单:

然后输入Bearer WhatEverApiKeyIsfgdgdgdg845734987fgdhgiher635kjh,完成后authorization: Bearer WhatEverApiKeyIsfgdgdgdg845734987fgdhgiher635kjh,当我从Swagger向Web Api发送请求时,我希望在请求的标头中看到该内容。但是授权未添加到请求标头中。我正在使用SwashBuckle.Swagger(5.0.0-rc3)。请注意,有许多示例可以在.net core 2.0上正常运行,但是Swashbuckle摇摇欲坠的功能在最新版本上已更改,因此我无法使用该示例。