首页 > 解决方案 > 身份服务器 4 和用户权限

问题描述

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

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

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

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

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

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

非常感谢任何帮助。

谢谢

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

解决方案


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

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

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

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


推荐阅读