gpt4 book ai didi

asp.net-web-api - 带有 WIF 和 OWIN 中间件的角色与声明授权 Asp.net web api-2

转载 作者:行者123 更新时间:2023-12-04 18:40:18 26 4
gpt4 key购买 nike

我正在尝试使用 Windows Identity Foundation 2 保护 asp.net web-api 2.0。我必须在基于角色的授权和基于声明的授权之间做出选择。作为练习,我在 DbInitializer 中添加了一个用户。并为他分配了两个角色(管理员和经理)。当我使用该用户登录时,我看到 ClaimsPrincipal在 Debug模式下,它已经将这些角色(管理员和经理)关联为声明。所以这里有问题:

  • 如果角色也被视为声明,那么黑白角色和声明有什么区别?
  • 如果我远离角色,我如何使用声明来保护 Web api Controller 和相关的操作方法。就像,我有一个包含 CRUD 方法的订单 Controller 。我希望一个用户(比如经理)有权访问 Create 和 Get 方法,而第二个用户(管理员)有权访问所有这些方法。
    我该怎么做?使用基于角色的系统,我会简单地用适当的 Authorize(Role = "Admin") 装饰操作方法属性。我将如何管理 claim 本身?我是否需要将它们添加到数据库中并通过我的应用程序向不同用户授予/撤销这些声明?
  • 最佳答案

    原则上,角色和声明之间没有很大区别。我已经完全迷上了基于声明的授权,做了很多研究和一些测试项目。归根结底,这一切都取决于您来决定使用哪一个。

    正如您所说,角色是作为声明类型添加的。所以在交付方面没有区别。但是 MVC/WebApi 已经有内置的基础设施来处理角色并在用户没有所需角色时拒绝。因此,您不必自己做太多事情。
    但是您必须在 Controller / Action 上提出一堆属性,并确保它们都存在于数据库中,以便可以将用户分配给它们。

    但是我发现你可以拥有太多的角色,并且它们变得难以维护。此外,您不能为您的用户分配太多角色 - 他们的身份验证 cookie 将变得庞大,并且由于浏览器中的 cookie 大小限制(每个 cookie 4K,所有 HTTP header 16K),最终将不得不无法登录。

    通过 claim ,您可以更加灵活。您可以有许多不同类型的声明(我们每个 Controller 的声明少于一个)和一些声明值(读取、创建、编辑、删除)。对于一个下降大小的应用程序(我们有超过 100 个),您必须拥有很多角色(每个 Controller 4 个)来模拟这种级别的权限控制。对于 claim ,我们有 enum对于 claim 类型(人员、产品、订单)和 enum声明值(创建、读取、编辑、删除)。在 cookie 中,您可以将整数设置为声明类型和声明值 - 这可以在身份验证 cookie 上节省大量空间。

    但是对于声明,您必须自己编写身份验证机制。

    我一直在玩这个概念here这是authentication filter对于 MVC,但 WebApi 过滤器看起来非常相似。现在这个原型(prototype)的结果正在生产中并且运行良好。

    总体而言,您的问题的答案是“视情况而定”。主要是关于身份验证的粒度和应用程序的大小。

    关于asp.net-web-api - 带有 WIF 和 OWIN 中间件的角色与声明授权 Asp.net web api-2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27532798/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com