gpt4 book ai didi

asp.net-core - 如何使用 swagger UI 和解决方法选项预检问题 (CORS) 设置 ClientCredentials 流

转载 作者:行者123 更新时间:2023-12-04 11:48:02 25 4
gpt4 key购买 nike

我有一个使用 swagger 库的 asp.net 核心应用程序

<PackageReference Include="Swashbuckle.AspNetCore" Version="5.6.3" />
我希望允许使用/swagger 网页的 api 开发人员能够使用“ClientCredentials”流获取 token 。
我已尝试以下操作,但遇到选项预检问题
        c.AddSecurityDefinition("oauth2", new OpenApiSecurityScheme
{
Type = SecuritySchemeType.OAuth2,
Flows = new OpenApiOAuthFlows
{
ClientCredentials = new OpenApiOAuthFlow
{
TokenUrl = new Uri(baseAuthURL + "/oauth2/v2.0/token"),
Scopes = new Dictionary<string, string>
{
{ "ABC/.default", "Access read operations" }
},
AuthorizationUrl = new Uri(baseAuthURL + "/oauth2/authorize")
}
}
});
当我点击授权时
enter image description here
查看控制台后,这是我看到的

Access to fetch at'https://login.microsoftonline.com/ABCD/oauth2/v2.0/token' from origin'https://localhost:44312' has been blocked by CORS policy: No'Access-Control-Allow-Origin' header is present on the requestedresource. If an opaque response serves your needs, set the request'smode to 'no-cors' to fetch the resource with CORS disabled.


我该如何解决这个问题?要解决此问题,究竟需要对“AddSecurityDefinition”进行哪些更改?这是我什至能够解决的问题吗? (假设身份提供者可以支持选项预检请求)
是创建反向代理的唯一解决方法吗?
如何扩展上面的代码以在请求中发送自定义 HTTP 请求 header ?
我在网上搜索了几个小时,其中有人成功使用 ClientCredentials 流在 swaggerUI 中获取 oauth token 。
更新 1:
非常奇怪的是,即使选项预检请求正在接收带有 header 的响应
访问控制允许来源:*
如果我使用 chrome 扩展将此值覆盖为完全相同的值,则可以解决该问题。它显然不是解决方案,而是更多的观察。将值设置为完全相同的值以某种方式改变结果是非常奇怪的。
以下是响应 header 的差异。左侧没有任何 Chrome 扩展,右侧 Chrome 扩展覆盖到完全相同的值。你可以看到没有区别。那么为什么浏览器会以不同的方式对待它呢?
enter image description here
我还尝试使用 AWS API Gateway 添加授权 api 代理,您可以看到下面设置的响应 header 。这也不起作用。
enter image description here

最佳答案

将此添加到您在 Starup 中的服务配置中:

public void ConfigureServices(IServiceCollection services)
{
services.AddCors(options =>
{
options.AddPolicy("AnyOrigin", builder =>
{
builder =>
builder.WithOrigins("https://login.microsoftonline.com")
.AllowAnyMethod()
.AllowAnyHeader()
.AllowCredentials());
});
});
}
然后这是您的应用程序配置:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env
{
// after routing / mvc
app.UseCors("AnyOrigin");
}
请注意,您正在发送授权 header ,因此是凭证请求,并转换为 Access-Control-Allow-Credentials CORS header 。端点需要返回 200 OK,这应该可以工作。
有关与 SwaggerUI 相关的更多帮助,以下是有用的资源: https://swagger.io/docs/open-source-tools/swagger-ui/usage/cors/

关于asp.net-core - 如何使用 swagger UI 和解决方法选项预检问题 (CORS) 设置 ClientCredentials 流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64812476/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com