2017-02-24 48 views
0

我正在使用Identity Server 4从单个应用程序页面对用户进行身份验证。为了项目的需要,我必须使用资源所有者密码流。
Identity Server和我的应用程序一起工作良好。 Identity Server提供访问令牌,我可以使用此令牌访问我们拥有的某些API。 但是,我在问自己关于访问令牌,用户和社会。现在我的设置是这个。在资源所有者密码流中,用户是否可以处理范围?

  • 我有一个需要范围API-1的API。
  • 我有一个客户端(我的SPA),我定义范围API-1
  • 而且我有一个用户。

在此配置中,客户拥有访问API的权限,而不是用户。我想知道如何将这个范围提供给用户,而不再是客户。

很愚蠢,我想知道如果用户可以拥有范围,而不是客户端。也许我错过了或误解了一些东西,所以请教我。

回答

0

在资源所有者密码流中,您的客户端将始终需要对您的资源受其保护的范围拥有权限。这并不意味着您无法保护您的API,但是它基于与用户相关的声明。

如果在您的API中,例如您需要基于访问API的用户的不同权限,请使用声明信息作为授权的一部分。在资源所有者口令流例如在http://docs.identityserver.io/en/release/quickstarts/2_resource_owner_passwords.html你会看到,它提到这个页面的脚下,看到两个段落如下:

当您发送令牌身份API端点,你会发现与客户证书授权相比,这是一个小而重要的区别。访问令牌现在将包含唯一标识用户的子索赔。通过在调用API之后检查内容变量可以看到这个“子”声明,并且也将通过控制台应用程序显示在屏幕上。

子声明的存在(或不存在)让API在代表客户端和代表用户的呼叫之间进行区分。

+0

因此,我可以向我的用户添加一些代表API的范围。感谢你的回答 ! – Waldo

+1

您不会将范围添加到用户,您向用户添加声明,范围仍然与您的客户端。在您的API中,您可以访问这些用户声明,甚至可以将它们作为Authorization的一部分使用,如果您想这样做,可以通过将策略添加到控制器或操作的Authorize属性来完成。有关基于asp.net核心的权利声明的更多信息(包括示例),请参见https://docs.microsoft.com/zh-cn/aspnet/core/security/authorization/claims –

相关问题