我们正在使用身份服务器来授予对api的访问权限。到目前为止,我们使用(或需要)的全部是不涉及用户的ClientCredentials(机器对机器)。
现在,我们要求用户必须参与其中,并且必须交付用户权限。
我已经阅读了很多有关Granttypes的内容:隐式,授权代码,Hybrid等...,但仍然找不到关于最佳实践的明确答案。
有什么方法可以将用户权限集成到access_token中(这也是一个好主意吗?)。 AspNetIdentity已经集成,并且表已存在于Identityserver数据库中。
services.AddIdentity<User, IdentityRole>()
.AddEntityFrameworkStores<IdentityContext>()
.AddDefaultTokenProviders();
如何发送客户端凭据和用户凭据,以便我们的身份服务器也可以收集用户信息(权限,声明,角色等...)?
我们非常感谢您的帮助。
谢谢
答案 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的事实实际上是无关紧要的。