身份服务器4和用户权限

问题描述 投票:0回答:1

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

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

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

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

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

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

任何帮助都非常感谢。

谢谢

c# asp.net-core identityserver4 asp.net-core-identity
1个回答
0
投票

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.