【问题标题】:Role and Policy Authorization without AspNetCore Identity?没有 AspNetCore 身份的角色和策略授权?
【发布时间】:2019-11-19 13:14:21
【问题描述】:

我们目前正在将我们的内部桌面应用程序转移到一系列具有统一Identity Server 的 Web 应用程序。因此,我们正在利用 Identity Server 来管理我们所有的用户帐户,并允许它联合访问我们的客户端和 API。总的来说,这一切都很好。

但是,我找不到任何示例,其中有人在不使用 AspNetCore Identity 的情况下设法实现基于角色或策略的授权。使用 IdentityServer 管理我的用户,我宁愿不必在我的身份服务器和我的个人 webapps 之间复制我的用户,而是更喜欢让每个 webapp 管理自己的内部权限。

是否有任何示例说明如何在不利用整个 AspNetCore Identity 的情况下实施基于策略的授权?

【问题讨论】:

  • 只要您的身份对象被填充,您就可以利用基于角色/策略的授权
  • @Steve 我注意到我可以使用在 IdentityServer 上分配的角色,但是如何让应用程序特定的角色仅在应用程序本身上处理和管理?
  • 您将应用特定的角色存储在哪里?它在用户的对象中吗?如果不是,那么它存储在哪里?如果您可以显示身份对象的结构会更容易
  • @Steve 的想法是将特定于应用程序的角色、声明和策略存储在特定于应用程序的数据库中。通过创建仅引用来自 IdentityServer 的 sub 声明的有限 Users 表,或者仅使用 sub 声明代替专用表。
  • @Steve 总体而言,我们希望能够将给定用户从身份服务器分配的声明/角色添加到其中。身份服务器管理全局权限,但当事情在应用程序级别变得更细化时,我们希望添加额外的声明和角色。

标签: c# architecture authorization asp.net-identity identityserver4


【解决方案1】:

您的问题的答案是设置单独的身份验证服务器和单独的授权服务器。正如 IdentityServer 的一位创建者所评论的 here

IdentityServer 既是 OAuth 2.0 又是 OpenID Connect 实现。 是的——我们建议使用 IdentityServer 进行最终用户身份验证, 联合和 API 访问控制。

PolicyServer 是我们推荐的用户授权。

文章本身值得一读,这里是PolicyServer网站的链接。

这个想法很简单,尽管有不同的方法可能。实施可能需要一些时间,因为免费的开源版本使用本地源,而您可能希望使用集中式版本。在这种情况下,您可以考虑先看一下商业版本。

简而言之,它是如何工作的。首先对用户进行身份验证。然后授权中间件将声明添加到用户。然后用户被授权。在code 中,类似:

app.UseAuthentication();

// add this middleware to make roles and permissions available as claims
// this is mainly useful for using the classic [Authorize(Roles="foo")] and IsInRole functionality
// this is not needed if you use the client library directly or the new policy-based authorization framework in ASP.NET Core
app.UsePolicyServerClaims();

app.UseAuthorization();

这将使身份验证流程保持不变,并为用户提供“选择加入”授权。为了提高性能,您可以使用缓存。

sub 声明是关键。作为 oidc 流程的一部分,这是唯一一个保持不变的声明。

OSS 示例适用于 Mvc 客户端,但是当您使用资源 (api) 对其进行扩展时,它将无法开箱即用。因为访问令牌可能不包含所有声明。

这就是本质,它是最了解哪些声明相关的资源。所以应该是请求信息的资源。

事实上,这是本地 PolicyServer 实现所做的,客户端和 api 的不同策略 json。您可以将其移至数据库并使用客户端/范围作为鉴别器,为每个用户(子)定义角色/权限。

api 可以使用访问令牌向授权服务器请求信息。解决客户想知道允许哪些功能的问题,例如对于构建菜单,您可以使用端点扩展授权服务器,它可以请求角色/权限列表。

【讨论】:

    猜你喜欢
    • 2017-01-24
    • 2018-08-08
    • 2019-10-04
    • 1970-01-01
    • 2020-02-16
    • 1970-01-01
    • 2013-07-24
    • 2016-02-08
    • 1970-01-01
    相关资源
    最近更新 更多