身份服务器4和用户权限

时间:2019-02-25 15:04:17

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

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

现在,我们要求用户必须参与其中,并且必须交付用户权限。

我已经阅读了很多有关Granttypes的内容:隐式,授权代码,Hybrid等...,但仍然找不到关于最佳实践的明确答案。

有什么方法可以将用户权限集成到access_token中(这也是一个好主意吗?)。 AspNetIdentity已经集成,并且表已存在于Identityserver数据库中。

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

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

我们非常感谢您的帮助。

谢谢

1 个答案:

答案 0 :(得分:0)

您在这里混淆概念。 Identity Server仅处理用户主体(基本上只是一组属于“用户”的声明)。实际的用户管理是外包的,通常是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的事实实际上是无关紧要的。