当前位置: 首页 > 知识库问答 >
问题:

将基于声明的授权策略应用于SwaggerUI. Net Core 3.1

宋鸿德
2023-03-14

我使用ASP. Net Core 3.1制作了一个应用编程接口,并使用Swashuckle在网站的根目录下添加了SwaggerUI。也许这是一个微不足道的问题,但我希望SwaggerUI仅供授权用户访问(即不公开可用)。我读过很多关于Swagger如何处理API授权方案的帖子,但没有一篇关于SwaggerUI本身的帖子。特别是,我需要限制对它通过一些[Authorize(Policy="MyCustomPolicy")]属性或等价物创建的静态文件的访问,因此只有在其身份中具有特定声明的用户才能访问UI。此条件仅在SwaggerUI上需要,因为API本身已经通过承载身份验证进行了权限改造,并且工作正常。

如何将此索赔要求添加到Swagger UI?

这就是我添加招摇过市服务的方式:

// Register the Swagger Generator service. This service is responsible for genrating Swagger Documents.
// Note: Add this service at the end after AddMvc() or AddMvcCore().
services.AddSwaggerGen(c =>
{
        c.SwaggerDoc("v1", new OpenApiInfo
        {
            Title = "MySystem API",
            Version = "v1",
            Description = "API for MySystem.",
            Contact = new OpenApiContact
            {
                Name = "MyCompany S.A.",
                Email = string.Empty,
                Url = new System.Uri("https://contoso.com/"),
            },
        });

        var filePath = System.IO.Path.Combine(System.AppContext.BaseDirectory, "MySystem.Web.xml");
        c.IncludeXmlComments(filePath);

        c.CustomSchemaIds(x => x.GetCustomAttributes(false).OfType<DisplayNameAttribute>().FirstOrDefault()?.DisplayName ?? x.Name);
    });

以下是我如何将“招摇过市”添加到我的生成器中的:

    // Enable middleware to serve generated Swagger as a JSON endpoint.
    app.UseSwagger();

    // Enable middleware to serve swagger-ui (HTML, JS, CSS, etc.),
    // specifying the Swagger JSON endpoint.
    app.UseSwaggerUI(c =>
    {
        c.SwaggerEndpoint("/swagger/v1/swagger.json", "MySystem API v1");

        // To serve SwaggerUI at application's root page, set the RoutePrefix property to an empty string.
        c.RoutePrefix = string.Empty;
    });

提前感谢。

共有1个答案

苗征
2023-03-14

事实证明,这一点在这里得到了回答。我必须补充一点:

app.UseAuthentication(); // before UseAuthorization()

// Original answer
app.UseAuthorization(); // before the middleware
...

 类似资料:
  • 授权策略 必须 使用 授权策略 类来做用户授权。 使用基类 所有 Policy 授权策略类 必须 继承 app/Policies/Policy.php 基类。基类文件如下: <?php namespace App\Policies; use Illuminate\Auth\Access\HandlesAuthorization; class Policy { use HandlesA

  • 基于路径的授权 Apache和svnserve都可以给用户赋予(或拒绝)访问许可,通常是对整个版本库:一个用户可以读版本库(或不),而且他可以写版本库(或不)。如果可能,也可以定义细粒度的访问规则。一组用户可以有版本库的一个目录的读写权限,但是没有其它的;另一个目录可以是只对一少部分用户可读。 两种服务器都使用同样的文件格式描述路径为基础的规则,如果是Apache,需要加载mod_authz_sv

  • 这并不是: 唯一的区别是user/searchuser和group/searchgroup 当我尝试应用后者时,它只会给我一个错误: 关于为什么策略适用于用户而不是组,有什么想法吗?

  • 我想在我的Spring mvc项目之一中实现基于URL的授权。在我的Spring mvc项目中,我使用java配置。我已将此站点https://www.baeldung.com/role-and-privilege-for-spring-security-registration以实现基于角色和特权的授权。 所以我创建了下面的表来实现。 这是用户表。 这个角色表。 这是角色和特权之间的映射表。 这

  • 我是oAuth2安全系统的新手。关于访问REST资源的基于用户角色的授权,我有一个问题。我的互联网冲浪提供了关于oauth2的身份验证部分的输入。 让我提供给你困扰我的情况。

  • 我正在使用Auth0来获得一些在我的后端API服务器中工作的身份验证和授权。Auth0使用角色权限系统,它与此处描述的策略概念兼容-https://learn.microsoft.com/en-us/aspnet/core/security/authorization/policies?view=aspnetcore-3.1 在用户方面,我没有问题,收集令牌。当我研究令牌时,我注意到必要的范围正在