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

5tmbdcev  于 2024-01-08  发布在  其他
关注(0)|答案(1)|浏览(318)

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

第一个问题:

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

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

第二个问题:

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

  1. internal static void Configure(IConfiguration configuration, IServiceCollection services, IWebHostEnvironment environment, string apiName)
  2. {
  3. var authOptions = configuration.GetSection("Auth0").Get<OIDCOptions>();
  4. // Add Swagger options
  5. services.AddSwaggerGen(c =>
  6. {
  7. c.SwaggerDoc("v1", new OpenApiInfo { Title = $"{apiName} - {environment.EnvironmentName}", Version = "v1" });
  8. var securityDefinition = new OpenApiSecurityScheme
  9. {
  10. Type = SecuritySchemeType.OpenIdConnect,
  11. Name = "Authorization",
  12. In = ParameterLocation.Cookie,
  13. OpenIdConnectUrl = new Uri($"https://{authOptions.Domain}/.well-known/openid-configuration")
  14. };
  15. c.AddSecurityDefinition(
  16. "oauth2",
  17. securityDefinition);
  18. });
  19. }
  20. internal static void Configure(SwaggerUIOptions c, IConfiguration configuration, string apiName, string environmentName)
  21. {
  22. var authOptions = configuration.GetSection("Auth0").Get<OIDCOptions>();
  23. c.SwaggerEndpoint("v1/swagger.json", $"{apiName} - {environmentName}");
  24. c.InjectStylesheet("custom.css");
  25. c.EnableFilter();
  26. c.DocExpansion(DocExpansion.None);
  27. c.OAuthUsePkce();
  28. c.OAuthConfigObject.ClientId = authOptions.ClientId;
  29. c.OAuthConfigObject.ClientSecret = authOptions.ClientSecret;
  30. c.OAuthConfigObject.AppName = "Auth0";
  31. c.OAuth2RedirectUrl($"https://localhost:5001/callback");
  32. }

字符串

taor4pac

taor4pac1#

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

相关问题