不记名令牌未包含在 SwaggerUI 中

问题描述

我正在使用 AspNet Boilerplate 框架。我正在尝试在我的应用程序中通过 AzureAD 实现身份验证。我正在使用 ASP.NET core 3.0 并通过 swagger 测试我的应用程序。我看到令牌未包含在标头中。

Startup.cs 的ConfigureServices() 方法

                {
                    Type = SecuritySchemeType.OAuth2,Flows = new OpenApiOAuthFlows()
                    {
                        Implicit = new OpenApiOAuthFlow()
                        {
                            TokenUrl = new Uri(My Token Url),AuthorizationUrl = new Uri(My Authorization Url),Scopes = { { "api://357...../user_impersonation","Access adt-service" } }
                        }
                    }
                });

Startup.cs 的Configure() 方法

            {                
                options.OAuthClientId("22............");
                options.OAuthScopeSeparator(" ");
                
            });

如果我遗漏了什么,请告诉我。

解决方法

在您进行身份验证时,您是否首先收到令牌?在我的回答中,我假设你是。

您没有在代码片段中完全显示这一点,但您必须执行如下操作才能配置 Swagger 服务,对吗?

services.AddSwaggerGen(options =>
{
    options.SwaggerDoc(...);

    options.AddSecurityDefinition(
        "oauth",new OpenApiSecurityScheme
        {
            Type = SecuritySchemeType.OAuth2,Flows = new OpenApiOAuthFlows()
            {
                Implicit = new OpenApiOAuthFlow()
                {
                    TokenUrl = new Uri(My Token Url),AuthorizationUrl = new Uri(My Authorization Url),Scopes = { { "api://357...../user_impersonation","Access adt-service" } }
                }
            }
    });
});

如果是,只需在您的选项中添加一个安全要求,令牌就会包含在您的请求中:

services.AddSwaggerGen(options =>
{
    options.SwaggerDoc(...);

    options.AddSecurityDefinition(
        "oauth","Access adt-service" } }
                }
            }
    });

    options.AddSecurityRequirement(
        new OpenApiSecurityRequirement {
        {
            new OpenApiSecurityScheme
            {
                Reference = new OpenApiReference {
                    Type = ReferenceType.SecurityScheme,Id = "oauth"
                }
            },oauthScopes.Keys.ToArray() // array with scopes' keys used above in the security definition
        }
    });
});

请注意添加了 options.AddSecurityRequirement。名称/ID "oauth" 只是安全定义的标识名称。

这些代码段适用于 .net 5。我相信它们可能适用于 .net core 3

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...