在资源所有者密码流程中,用户可以处理范围吗?

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/…

以上是关于在资源所有者密码流程中,用户可以处理范围吗?的主要内容,如果未能解决你的问题,请参考以下文章

“资源所有者密码流程”和“客户凭证流程”之间的区别

苹果电脑上可以指定种子文件的搜索范围吗

续HTTP请求流程

身份服务器刷新令牌资源所有者密码凭证流

HTTP认证:Oauth2, JWT, BASIC

一个restful api可以从一个端点中删除两个相关资源吗?