C# Swagger UI-Oauth密码流,检索并向授权请求添加令牌
我刚刚开始在MVC中为ASP.NETAPI web项目使用Swagger UI。 除了认证之外,我对大多数部分都理解得很好 我正在使用OAuth ASP.Net标识。以下是我的设置: SwaggerConfig.cs AssignOAuth2SecurityRequests.cs index.html 在从应用程序页面授权/令牌请求时 但当我尝试访问端点值时,它会抛出一个错误 原因是请求缺少应该放在头中的承载令牌 我已经尝试了一些解决方案,但无法解决它C# Swagger UI-Oauth密码流,检索并向授权请求添加令牌,c#,asp.net-web-api,oauth,swagger,swagger-ui,C#,Asp.net Web Api,Oauth,Swagger,Swagger Ui,我刚刚开始在MVC中为ASP.NETAPI web项目使用Swagger UI。 除了认证之外,我对大多数部分都理解得很好 我正在使用OAuth ASP.Net标识。以下是我的设置: SwaggerConfig.cs AssignOAuth2SecurityRequests.cs index.html 在从应用程序页面授权/令牌请求时 但当我尝试访问端点值时,它会抛出一个错误 原因是请求缺少应该放在头中的承载令牌 我已经尝试了一些解决方案,但无法解决它 提前感谢。我最近也尝试过这个方法,您必须将
提前感谢。我最近也尝试过这个方法,您必须将[Authorize]属性放在方法级别,而不是控制器级别,然后它将工作并在每个请求中发送承载令牌。您也可以像这样检查ActionDescriptor和ControllerDescriptor。它将阻止您在所有控制器方法上放置Authorize属性
public void Apply(Operation operation, SchemaRegistry schemaRegistry, ApiDescription apiDescription)
{
var authorizeAttributes = apiDescription.ActionDescriptor.GetCustomAttributes<AuthorizeAttribute>().Any()
? apiDescription.ActionDescriptor.GetCustomAttributes<AuthorizeAttribute>()
: apiDescription.ActionDescriptor.ControllerDescriptor.GetCustomAttributes<AuthorizeAttribute>();
if (!authorizeAttributes.Any())
return;
if (operation.security == null)
operation.security = new List<IDictionary<string, IEnumerable<string>>>();
var oAuthRequirements = new Dictionary<string, IEnumerable<string>>
{
{ "oauth2", Enumerable.Empty<string>() }
};
operation.security.Add(oAuthRequirements);
}
internal class AssignOAuth2SecurityRequirements : IOperationFilter
{
public void Apply(Operation operation, SchemaRegistry schemaRegistry, ApiDescription apiDescription)
{
var authorizeAttributes = apiDescription.ActionDescriptor.GetCustomAttributes<AuthorizeAttribute>();
if (!authorizeAttributes.Any())
return;
if (operation.security == null)
operation.security = new List<IDictionary<string, IEnumerable<string>>>();
var oAuthRequirements = new Dictionary<string, IEnumerable<string>>
{
{ "oauth2", Enumerable.Empty<string>() }
};
operation.security.Add(oAuthRequirements);
}
}
<script>
window.onload = function() {
// Build a system
const ui = SwaggerUIBundle({
url: "http://localhost:17527/swagger/docs/v1",
dom_id: '#swagger-ui',
deepLinking: true,
presets: [
SwaggerUIBundle.presets.apis,
SwaggerUIStandalonePreset
],
plugins: [
SwaggerUIBundle.plugins.DownloadUrl
],
layout: "StandaloneLayout"
})
window.ui = ui
}
</script>
public void Apply(Operation operation, SchemaRegistry schemaRegistry, ApiDescription apiDescription)
{
var authorizeAttributes = apiDescription.ActionDescriptor.GetCustomAttributes<AuthorizeAttribute>().Any()
? apiDescription.ActionDescriptor.GetCustomAttributes<AuthorizeAttribute>()
: apiDescription.ActionDescriptor.ControllerDescriptor.GetCustomAttributes<AuthorizeAttribute>();
if (!authorizeAttributes.Any())
return;
if (operation.security == null)
operation.security = new List<IDictionary<string, IEnumerable<string>>>();
var oAuthRequirements = new Dictionary<string, IEnumerable<string>>
{
{ "oauth2", Enumerable.Empty<string>() }
};
operation.security.Add(oAuthRequirements);
}