【发布时间】:2020-11-12 22:05:01
【问题描述】:
我有一个使用 swagger 库的 asp.net 核心应用程序
<PackageReference Include="Swashbuckle.AspNetCore" Version="5.6.3" />
我希望允许使用 /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 扩展将此值覆盖为完全相同的值,它可以解决该问题。它显然不是一个解决方案,而是更多的观察。将值设置为完全相同的值会以某种方式改变结果,这很奇怪。
以下是响应标头的差异。左侧没有任何镀铬扩展,右侧镀铬扩展覆盖到完全相同的值。你可以看到没有区别。那么,为什么浏览器会以不同的方式对待它呢?
【问题讨论】:
-
你解决了吗?
标签: asp.net-core oauth swagger