IdentityServer-用户API访问



前提是我们希望构建一个API,该API根据通过IdentityServer4授权的用户来确定其输出。例如,用户"John"(存在于我们产品中的用户(将希望开始使用产品的API。所以他通过我们的Identity Server注册访问权限,然后离开。根据他在产品中的角色和权利,API将返回只能由John访问的信息和数据。API知道是John,因为John以某种方式通过IdentityServer授权了自己。

tl;低于的dr

这就是事情变得模糊的地方。通常,我们的客户使用自己的软件与我们的API进行通信,并从中获取数据。由于那里没有用户交互,隐式或混合流不起作用(据我所知(。因此,我们只剩下一台客户端机器和一个API,它想知道用户是谁,这样它就可以决定返回什么数据。资源所有者密码授予似乎是一个糟糕的选择,因为我们希望避免仅仅为了获得令牌而发送用户的凭据,这似乎是一种糟糕的做法。

所以我们不确定还有什么选择。我确信可以使用某种手动映射来注册哪个用户使用哪个客户端,但这不属于OAuth/IdentityServer,需要手动修补,这是我们希望避免的。

tl;dr-在不需要资源所有者密码授予的情况下,让非交互式客户端作为其代表的用户进行授权的最佳方法是什么?它真的存在吗?

更新-我们将尝试为我们的场景实现我们自己的授权验证器。如果我们成功了,我会发布一个额外的更新详细信息。

在您的场景中,您别无选择,只能将用户信息作为请求主体的一部分进行传递。您可能会尝试以某些方式混淆它,例如使用证书进行签名。

您的场景可以被视为"可信客户端",因此不需要重定向流(混合、隐式(,这对于机器对机器(api(的使用来说非常好。

用户信息在混合或隐式的任何JWT结果中仍然是公开的(只需访问https://jwt.io/解码(,所以使用什么来识别用户很重要。