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