【问题标题】:Identity server 4 and user permissions身份服务器 4 和用户权限
【发布时间】:2019-07-19 00:38:10
【问题描述】:

我们正在使用身份服务器来授予对 API 的访问权限。到目前为止,我们使用(或需要)的只是 ClientCredentials(机器对机器),其中不涉及用户。

现在我们得到了用户应该参与的要求,我们必须交付用户权限。

我已经阅读了很多关于 Granttypes: Implicit、Authorization code、Hybrid 等的文章……但仍然没有找到关于最佳实践的明确答案。

有没有办法在 access_token 中集成用户权限(这也是个好主意吗?)。 AspNetIdentity 已经集成,并且表存在于 identityserver 数据库中。

services.AddIdentity<User, IdentityRole>()
.AddEntityFrameworkStores<IdentityContext>()
.AddDefaultTokenProviders();

如何发送客户端凭据和用户凭据,以便我们的身份服务器也可以收集用户信息(权限、声明、角色等...)?

非常感谢任何帮助。

谢谢

【问题讨论】:

  • 权限和角色可以用组来处理,您可以添加组或角色作为声明。声明将根据您请求的范围添加到您的令牌中

标签: c# asp.net-core identityserver4 asp.net-core-identity


【解决方案1】:

您在这里混淆了概念。 Identity Server 仅处理用户主体(基本上只是属于“用户”的一组声明)。实际的用户管理是外包的,最常见的是 Identity。身份本身也是基于声明的,角色实际上只是一种声明。

授权完全是另一回事,在技术上并不明确涉及身份或身份服务器,尽管它们通常充当所述授权的网关。在 ASP.NET Core 中,授权可以是基于角色、基于声明或基于策略的,然后是与技术框架无关的资源级授权选项。然而,这最终仍将依赖于三巨头之一:角色、主张或政策。它将仅具有特定于特定资源的附加组件。您想授权哪种方式完全取决于您,当然您也可以混合搭配。

最终,您只需通过 Identity 提供的工具为您的用户设置角色和/或声明,当然,这些工具将保留在您的用户/角色存储中。然后,当通过 Identity Server 或直接进行身份验证时,将创建一个 ClaimsPrincipal 并将其添加到 HttpContext。当需要授权时,将以某种方式利用此主体上的声明来确定是否应允许访问。就这么简单。

Identity Server 仅充当集中式身份验证提供程序。由于通信是通过 HTTP 进行的,因此它实际上将返回 JSON,特别是 JWT。然后,ASP.NET Core 的身份验证中间件(本应设置为使用 Identity Server 作为其提供者)将简单地破译 JWT 并从中创建实际的 ClaimsPrincipal 实例。不过,在最初的实施之后,您无需担心任何这些。一旦所有东西都集成了,使用 Identity Server 的事实几乎是无关紧要的。

【讨论】:

    猜你喜欢
    • 2020-11-17
    • 2017-07-26
    • 1970-01-01
    • 1970-01-01
    • 2018-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多