Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Swagger UI-Oauth密码流,检索并向授权请求添加令牌_C#_Asp.net Web Api_Oauth_Swagger_Swagger Ui - Fatal编程技术网

C# Swagger UI-Oauth密码流,检索并向授权请求添加令牌

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 在从应用程序页面授权/令牌请求时 但当我尝试访问端点值时,它会抛出一个错误 原因是请求缺少应该放在头中的承载令牌 我已经尝试了一些解决方案,但无法解决它 提前感谢。我最近也尝试过这个方法,您必须将

我刚刚开始在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);
 }