有条件地忽略授权.NET Core 3.1

迦勒·鲁宾逊

我正在将Web API从.net Framework迁移到.net Core。如果该应用程序在私有服务器上运行,则旧版本可以忽略控制器上的Authorize Attribute。这是代码。我知道.net core 3.1不提供自定义AuthorizeAttributes。那不是我的问题。

// A custom AuthroizeAttribute
public class ConditionalAuthorizeAttribute : AuthorizeAttribute
{

    protected override bool IsAuthorized(HttpActionContext httpContext)
    {
        if (environment_private())
            return true;
        else
            return base.IsAuthorized(httpContext);
    }


    private bool environment_private()
    {
        // code that will tell you if you are in your dev environment or not
        return Properties.Settings.Default.PrivateServer;
    }
}

// How it was called from the controller
[ConditionalAuthorize(Roles = "MyRole")]
[Route(...)]
// More code for controller

在私有服务器上运行项目时,我只需要一种简单的方法来授权所有请求(由appSettings.json中的变量确定)。我已经尝试过政策,但是面临以下困难:

1)我无法将配置中的变量从控制器传递给参数化的授权属性。
2)我无法将配置注入到参数化的授权属性中。

这实际上消除了我以任何方式遵循本指南的能力:https : //docs.microsoft.com/zh-cn/aspnet/core/security/authorization/iauthorizationpolicyprovider?view=aspnetcore-2.2

这导致了我的问题:如何使用appSettings.json中的值覆盖请求是否检查角色?

迦勒·鲁宾逊

经过大量研究,我找到了使用的方法TypeFilterAttribute本质上,这是相同的方法(使用自定义属性过滤所有请求并检查自定义属性中的条件),只是我使用了.net Core支持的方法。

如果您尝试解决相同的问题,这是我的解决方案的确切步骤。

  1. 添加两个文件“ YourAttributeNameAttribute.cs”和“ YourFilterNameFilter.cs”。
  2. 在“ YourAttributeNameAttribute.cs”文件中,代码如下:
public class YourAttributeNameAttribute : TypeFilterAttribute
{
    public YourAttributeNameAttribute(string role) : base(typeof(YourFilterNameFilter))
    {
        Arguments = new object[] { role };
    }
}
  1. “ YourFilterNameFilter.cs”中的代码:
public class YourFilterNameFilter : IAuthorizationFilter
{
    private readonly string Role;
    public YourFilterNameFilter(string role)
    {
        Role = role;
    }
    public void OnAuthorization(AuthorizationFilterContext context)
    {
        var configuration = context.HttpContext.RequestServices.GetService<IConfiguration>();

        // If private server, ignore roles
        if (private_server_logic_here)
            return;

        var user = context.HttpContext.User;

        // Check role if on public server
        if (!user.IsInRole(Role))
        {
            context.Result = new StatusCodeResult((int)System.Net.HttpStatusCode.Unauthorized);
            return;
        }
    }
}
  1. 控制器的代码:
[YourAttributeName("role_name")]
[Route("api/my_route")]
[HttpGet]

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

有条件地显示hide asp.net Gridview列

来自分类Dev

有条件地显示/隐藏ASP.NET中的html区域

来自分类Dev

有条件地添加一个新的json.net JProperty

来自分类Dev

在d3中有条件地建立组

来自分类Dev

VB.Net早期绑定类有条件地变量

来自分类Dev

使用ng-class有条件地添加CSS3动画

来自分类Dev

有条件地使用ASP.NET MVC Razor中的链接

来自分类Dev

如何在asp.net MVC视图中有条件地设置模型?

来自分类Dev

将'hd'参数附加到带有身份标识3的redirectUrl ASP.NET Core 1

来自分类Dev

如何在使用JSON.Net进行序列化期间有条件地忽略字段和属性?

来自分类Dev

获取ASP.NET Core 1中的所有缓存

来自分类Dev

仅当工具支持时,如何有条件地构建.Net Core 3.0?

来自分类Dev

.NET Core 3中的日志请求有效负载

来自分类Dev

有条件地包含在EF Core中

来自分类Dev

如何有条件地删除由ASP.NET Core注册并添加到ServiceCollection的控制器

来自分类Dev

有条件的Asp.Net Core 3.1种子数据

来自分类Dev

.Net Core项目尝试有条件地引用32/64位程序集,但dotnet构建始终解析64位

来自分类Dev

SHA1(c#)-与.Net 3和.Net Core不同的结果

来自分类Dev

使用XSLT1有条件地显示来自XML的数据?

来自分类Dev

如何有条件地在上下文ASP.NET Core WebAPI上获取值

来自分类Dev

覆盖ASP.NET Core 3中的授权策略

来自分类Dev

有条件地退出或继续在vb.net中循环

来自分类Dev

有条件地添加一个新的json.net JProperty

来自分类Dev

.NET有条件地使用.NET库(如果已安装)

来自分类Dev

如何在.net中有条件地继承类

来自分类Dev

在 React 中有条件地添加表 n+1 行(<tr>)

来自分类Dev

有条件地编译最低版本的 .NET

来自分类Dev

Python 数据框:创建有条件地连接来自 1 或 3 个其他列的字符串值的新列

来自分类Dev

在 asp.net 核心视图中有条件地呈现禁用的按钮

Related 相关文章

  1. 1

    有条件地显示hide asp.net Gridview列

  2. 2

    有条件地显示/隐藏ASP.NET中的html区域

  3. 3

    有条件地添加一个新的json.net JProperty

  4. 4

    在d3中有条件地建立组

  5. 5

    VB.Net早期绑定类有条件地变量

  6. 6

    使用ng-class有条件地添加CSS3动画

  7. 7

    有条件地使用ASP.NET MVC Razor中的链接

  8. 8

    如何在asp.net MVC视图中有条件地设置模型?

  9. 9

    将'hd'参数附加到带有身份标识3的redirectUrl ASP.NET Core 1

  10. 10

    如何在使用JSON.Net进行序列化期间有条件地忽略字段和属性?

  11. 11

    获取ASP.NET Core 1中的所有缓存

  12. 12

    仅当工具支持时,如何有条件地构建.Net Core 3.0?

  13. 13

    .NET Core 3中的日志请求有效负载

  14. 14

    有条件地包含在EF Core中

  15. 15

    如何有条件地删除由ASP.NET Core注册并添加到ServiceCollection的控制器

  16. 16

    有条件的Asp.Net Core 3.1种子数据

  17. 17

    .Net Core项目尝试有条件地引用32/64位程序集,但dotnet构建始终解析64位

  18. 18

    SHA1(c#)-与.Net 3和.Net Core不同的结果

  19. 19

    使用XSLT1有条件地显示来自XML的数据?

  20. 20

    如何有条件地在上下文ASP.NET Core WebAPI上获取值

  21. 21

    覆盖ASP.NET Core 3中的授权策略

  22. 22

    有条件地退出或继续在vb.net中循环

  23. 23

    有条件地添加一个新的json.net JProperty

  24. 24

    .NET有条件地使用.NET库(如果已安装)

  25. 25

    如何在.net中有条件地继承类

  26. 26

    在 React 中有条件地添加表 n+1 行(<tr>)

  27. 27

    有条件地编译最低版本的 .NET

  28. 28

    Python 数据框:创建有条件地连接来自 1 或 3 个其他列的字符串值的新列

  29. 29

    在 asp.net 核心视图中有条件地呈现禁用的按钮

热门标签

归档