IdentityServer4 客户端范围和基于用户声明的授权

Posted

技术标签:

【中文标题】IdentityServer4 客户端范围和基于用户声明的授权【英文标题】:IdentityServer4 Client Scopes and User Claims based authorization 【发布时间】:2018-04-28 08:31:37 【问题描述】:

我有一个用于身份验证/授权的 IdentityServer4,但我对如何实现以下目标有点困惑:

如果我让我们说 2 个客户端,并且他们正在尝试访问 2 个 API(每个客户端可以访问其中一个),但是我有不同权限的用户(user1 可以访问第一个 API,user2 可以访问第二个 API, user3 可以同时访问)

当应该有权访问两个 API 的用户 3 使用第一个客户端登录时(客户端仅请求 api1 范围),我将如何向他提供一个令牌,授予他访问两个 API(范围)的权限,所以他不应该再次登录使用第二个客户端时?

我已经阅读了很多关于用户声明和客户范围的讨论,但对于如何在上述案例中使用它们进行身份验证,我仍然没有明确的答案。

【问题讨论】:

【参考方案1】:

客户端需要同时请求两个范围,或者您需要一个可以访问两个 API 的范围。

范围被授予客户端,除非客户端请求两个范围,否则您的 Id 无法知道 user3 应该有权访问两者。

【讨论】:

我不能根据存储在数据库中的用户声明应用我自己的逻辑吗? 客户端请求一个不会被同一个客户端使用的客户端似乎不合逻辑 您可以随意破解自己的逻辑。但是,如果我作为用户对应用程序(客户端)进行身份验证,并且他们请求访问以读取某些内容,而您在后面破解逻辑,则允许他们访问以写入某些内容。 IMO,您正在破坏身份服务器的目的,即通知用户正在授予客户端什么访问权限,并阻止客户端访问用户不希望他们访问的数据。 好点,谢谢;但是我们如何才能避免不同客户端的多次登录,并且仍然允许客户端仅访问它应该访问的范围? 每个客户端的每个用户只能登录一次。您可以拥有请求不同访问权限的不同客户端。在某些系统中,您还可以扩展访问权限。所以我可以请求只读开始,但如果以后用户想要做一些需要写访问的事情,你可以请求额外的范围。

以上是关于IdentityServer4 客户端范围和基于用户声明的授权的主要内容,如果未能解决你的问题,请参考以下文章

刷新 IdentityServer4 客户端中的访问令牌

IdentityServer4文档- 使用客户端凭据保护 API

访问令牌不包括 Identity Server 4 中声明的范围

基于IdentityServer4的声明的授权

IdentityServer4-前后端分离的授权验证

IdentityServer4-前后端分离的授权验证