身份服务器 4 和用户权限

ala*_*egh 3 c# asp.net-core identityserver4 asp.net-core-identity

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

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

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

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

services.AddIdentity<User, IdentityRole>()
.AddEntityFrameworkStores<IdentityContext>()
.AddDefaultTokenProviders();
Run Code Online (Sandbox Code Playgroud)

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

任何帮助都受到高度赞赏。

谢谢

Chr*_*att 6

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

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

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

Identity Server 只是作为一个集中的身份验证提供者。由于通信是通过 HTTP 进行的,它实际上将返回 JSON,特别是 JWT。然后,ASP.NET Core 的身份验证中间件(已设置为使用 Identity Server 作为其提供程序)将简单地解密 JWT 并ClaimsPrincipal从中创建实际实例。但是,在初始实现之后,您无需担心任何这些。一旦集成了所有内容,使用 Identity Server 的事实实际上就无关紧要了。