Identity Server 4 和用户权限

3
我们正在使用身份服务器授予对API的访问权限。我们到目前为止所使用(或需要的)的仅是ClientCredentials(机器对机器),用户不参与。
现在,我们得到了用户应该参与并且必须提供用户权限的要求。
我已经阅读了很多关于授权类型的资料:Implicit、Authorization code、Hybrid 等等...但仍然没有找到最佳实践的清晰答案。
有没有办法将用户权限集成到access_token中(这也是一个好主意吗?)。AspNetIdentity已经集成在一起,并且表存在于identityserver数据库中。
services.AddIdentity<User, IdentityRole>()
.AddEntityFrameworkStores<IdentityContext>()
.AddDefaultTokenProviders();

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

非常感谢您的帮助。

谢谢


权限和角色可以通过组进行处理,您可以将组或角色添加为声明。根据您请求的范围,声明将被添加到您的令牌中。 - MJK
1个回答

8
您在混淆概念。Identity Server 只涉及用户主体(基本上是属于“用户”的一组声明)。实际的用户管理被外包,通常是给 Identity。Identity 本身也是基于声明的,角色实际上只是声明的一种类型。
授权是一个完全不同的东西,在技术上并没有明确涉及 Identity 或 Identity Server,尽管它们经常充当所谓授权的网关。在 ASP.NET Core 中,授权可以是基于角色、基于声明或基于策略的,然后还有技术框架无关的资源级别授权选项。但是,这仍然最终依赖于三个大的方面:角色、声明或策略。你要授权的方式完全取决于你自己,当然你也可以混搭使用。
最终,你只需要通过 Identity 提供的工具为你的用户设置角色和/或声明,这些信息会被保存到你的用户/角色存储中。然后,在 Identity Server 或直接进行身份验证时,将创建并添加一个 ClaimsPrincipal 到 HttpContext。需要授权时,该主体上的声明将以某种方式用来确定是否应允许访问。就是这么简单。
Identity Server 只是作为集中式认证提供程序。由于通信是通过 HTTP 进行的,它实际上将返回 JSON,特别是 JWT。然后,ASP.NET Core 的身份验证中间件(它将被设置为使用 Identity Server 作为其提供程序)将简单地解密 JWT 并从中创建实际的 ClaimsPrincipal 实例。不过,过了最初的实现,你就不需要再考虑这些了。一旦所有内容都集成在一起,Identity Server 的使用事实上是无关紧要的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接