如何解决如何使用摇摇欲坠的UI和解决方法选项预检问题CORS设置ClientCredentials流
我有一个使用swagger库的asp.net核心应用程序
<PackageReference Include="Swashbuckle.AspNetCore" Version="5.6.3" />
Id希望允许使用/ swagger网页的api开发人员能够使用“ ClientCredentials”流获取令牌。 我已经尝试了以下方法,但是遇到了印前检查问题
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")
}
}
});
当我单击授权时
查看控制台后,这就是我看到的
访问地址为 来源中的'https://login.microsoftonline.com/ABCD/oauth2/v2.0/token' 'https:// localhost:44312'已被CORS政策阻止:否 请求中出现“ Access-Control-Allow-Origin”标头 资源。如果不透明的响应满足您的需求,请设置请求的 模式设置为“ no-cors”,以在禁用CORS的情况下获取资源。
如何解决此问题?要解决此问题,到底需要对“ AddSecurityDefinition”进行哪些更改?这是我什至可以解决的问题吗? (假设身份提供者可以支持选项预检请求)
是创建反向代理的唯一解决方法吗?
如何扩展上面的代码以在请求中发送自定义HTTP请求标头?
我已经在网上搜索了一个小时的示例,该示例成功地使用ClientCredentials流在swaggerUI中获取了oauth令牌。
更新1: 十分奇怪的是,即使选项预检请求正在接收带有标头的响应 访问控制允许来源:* 如果我使用chrome扩展名将该值覆盖为完全相同的值,则可以解决该问题。它显然不是解决方案,而是更多的观察结果。将值设置为等于完全相同的值以某种方式改变结果是很奇怪的。
下面是响应头的区别。左侧没有任何镀铬扩展,右侧有镀铬扩展覆盖到完全相同的值。您可以看到没有区别。那么为什么浏览器会对此有所不同呢?
我还尝试了使用AWS API Gateway添加授权api代理,您可以在下面看到设置的响应标头。这也不起作用。
解决方法
将此添加到您在 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");
}
请注意,您发送的是授权标头,因此是凭据请求,并转换为 Access-Control-Allow-Credentials CORS 标头。端点需要返回 200 OK,这应该可以工作。
有关 SwaggerUI 的更多帮助,以下是有用的资源:https://swagger.io/docs/open-source-tools/swagger-ui/usage/cors/
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。