【问题标题】: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 权限的是客户端,而不是用户。而且我想知道如何将此范围提供给用户,而不是再提供给客户端。

愚蠢的是,我想知道用户是否可以拥有范围而不是客户端。可能我遗漏了什么或者误解了什么,请教教我。

【问题讨论】:

    标签: oauth-2.0 asp.net-core access-token identityserver4


    【解决方案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/…
    猜你喜欢
    • 2018-12-14
    • 2017-12-13
    • 2013-11-23
    • 2016-04-28
    • 2023-03-19
    • 2017-11-14
    • 2019-04-08
    • 2016-02-22
    • 2014-03-31
    相关资源
    最近更新 更多