Swagger UI Oauth2回调将代码作为查询参数发送,而不是发送

5tmbdcev  于 5个月前  发布在  其他
关注(0)|答案(1)|浏览(73)

我正在尝试使用OIDC来保护.NET 8 API。
到目前为止,我可以调用登录端点,它正确地完成了整个登录过程,之后我可以调用授权端点。现在我正在尝试设置Swagger UI,以便它有效地完成同样的任务。

第一个问题:

如果我通过Swagger调用登录端点,它将返回

但是我想我不需要在这里修复这个问题,因为我可以使用UI上的常规“身份验证”按钮,这让我

第二个问题:

当我手动调用端点时,身份验证回调是一个POST,一切正常。当我通过Swagger登录时,一切正常,直到回调,这是一个GET,代码作为查询参数。我找不到我需要更改的设置,以使Swagger触发POST。
以下是相关的Swagger配置:

internal static void Configure(IConfiguration configuration, IServiceCollection services, IWebHostEnvironment environment, string apiName)
{
    var authOptions = configuration.GetSection("Auth0").Get<OIDCOptions>();

    // Add Swagger options
    services.AddSwaggerGen(c =>
    { 
        c.SwaggerDoc("v1", new OpenApiInfo { Title = $"{apiName} - {environment.EnvironmentName}", Version = "v1" });

        var securityDefinition = new OpenApiSecurityScheme
        {
            Type = SecuritySchemeType.OpenIdConnect,
            Name = "Authorization",
            In = ParameterLocation.Cookie,
            OpenIdConnectUrl = new Uri($"https://{authOptions.Domain}/.well-known/openid-configuration")
        };

        c.AddSecurityDefinition(
            "oauth2",
            securityDefinition);
    });
}

internal static void Configure(SwaggerUIOptions c, IConfiguration configuration, string apiName, string environmentName)
{
    var authOptions = configuration.GetSection("Auth0").Get<OIDCOptions>();

    c.SwaggerEndpoint("v1/swagger.json", $"{apiName} - {environmentName}");
    c.InjectStylesheet("custom.css");
    c.EnableFilter();
    c.DocExpansion(DocExpansion.None);
    c.OAuthUsePkce();
    c.OAuthConfigObject.ClientId = authOptions.ClientId;
    c.OAuthConfigObject.ClientSecret = authOptions.ClientSecret;
    c.OAuthConfigObject.AppName = "Auth0";
    c.OAuth2RedirectUrl($"https://localhost:5001/callback");
}

字符串

taor4pac

taor4pac1#

我想我已经弄明白了,这个问题与GET/POST完全无关。据我所知,SwaggerUI创建了一个单独的身份验证中间件,而不是使用现有的中间件。由于我将回调设置为不同的auth设置已经使用的相同路径,它不知道如何处理传入的令牌。删除c.OAuth2RedirectUrl($"https://localhost:5001/callback");并将swaggerUI默认回调路径添加到“允许的回调”我Auth 0应用程序注册中的列表似乎已经解决了这个问题。

相关问题