在资源所有者密码流程中,用户可以处理范围吗?
Posted
技术标签:
【中文标题】在资源所有者密码流程中,用户可以处理范围吗?【英文标题】:In resource owner password flow, can user handle the scope? 【发布时间】:2017-07-14 23:23:25 【问题描述】:我正在使用 Identity Server 4 从单个应用程序页面对用户进行身份验证。为了项目的需要,我必须使用资源所有者密码流程。 Identity Server 和我的应用程序可以很好地协同工作。 Identity Server 提供一个访问令牌,我可以使用此令牌访问我们拥有的某些 API。 但是,我在问自己有关访问令牌、用户和 socpes 的问题。目前我的设置是这个。
我有一个需要范围 API-1 的 API。 我有一个客户端(我的 SPA),我在其中定义了 API-1 范围 我有一个用户。在此配置中,拥有访问 API 权限的是客户端,而不是用户。而且我想知道如何将此范围提供给用户,而不是再提供给客户端。
愚蠢的是,我想知道用户是否可以拥有范围而不是客户端。可能我遗漏了什么或者误解了什么,请教教我。
【问题讨论】:
【参考方案1】:在资源所有者密码流程中,您的客户将始终需要对您的资源受保护的范围具有权限。然而,这并不意味着您不能根据与用户相关的声明来保护您的 API。
例如,如果在您的 API 中,您需要根据访问 API 的用户不同的权限,请使用声明信息作为您授权的一部分。在http://docs.identityserver.io/en/release/quickstarts/2_resource_owner_passwords.html 的资源所有者密码流示例中,您会看到它在页面底部提到了这一点,请参见以下两段:
当您将令牌发送到身份 API 端点时,与客户端凭据授予相比,您会注意到一个很小但很重要的区别。访问令牌现在将包含一个唯一标识用户的子声明。这个“子”声明可以通过在调用 API 后检查内容变量来查看,并且也将由控制台应用程序显示在屏幕上。
子声明的存在(或不存在)让 API 区分代表客户端的调用和代表用户的调用。
【讨论】:
所以,我可以向我的用户添加一些代表 API 的范围。感谢您的回答! 您不向用户添加范围,您向用户添加声明,范围仍属于您的客户。然后,在您的 API 中,您可以访问这些用户声明,如果您愿意,甚至可以将它们用作授权的一部分,这可以通过向控制器或操作上的 Authorize 属性添加策略来完成。有关 asp.net 核心中基于声明的授权的更多信息,包括示例,请参见docs.microsoft.com/en-us/aspnet/core/security/authorization/…以上是关于在资源所有者密码流程中,用户可以处理范围吗?的主要内容,如果未能解决你的问题,请参考以下文章