前提是我们要构建一个API,该API根据通过IdentityServer4授权的用户来确定其输出。例如,用户“ John”(我们产品中存在的用户)将要开始使用产品的API。因此,他通过我们的IdentityServer注册访问,然后退出。根据他在产品中的角色和权利,API将返回仅John可以访问的信息和数据。该API之所以知道是John,是因为John通过IdentityServer以某种方式授权了自己。
tl; dr以下
那是事情变得模糊的地方。通常,我们的客户使用自己的软件与我们的API进行通信并从中获取数据。因为那里没有用户交互,所以隐式或混合流不起作用(据我所知)。因此,我们只有一台客户端计算机和一个想知道用户是谁的API,以便可以确定要返回的数据。资源所有者密码授予似乎是一个糟糕的选择,因为我们希望避免仅为了获得令牌而发送用户的凭据,并且在一般情况下似乎是一种不好的做法。
因此,我们不确定还剩下哪些选项。我敢肯定,可以使用某种手动映射来注册哪个用户使用的客户端,但这属于OAuth / IdentityServer之外,需要手动修改,这是我们要避免的事情。
tl; dr -在不需要资源所有者密码授予的情况下,让非交互式客户端授权为它们所代表的用户的最佳方法是什么?它甚至存在吗?
更新-我们将尝试为我们的方案实现我们自己的授权验证器。如果我们成功了,我将发布包含详细信息的其他更新。
答案 0 :(得分:0)
在您的方案中,除了将用户信息作为请求正文的一部分传递之外,您别无选择。您可以尝试通过某些方式对其进行混淆,例如用证书签名。
您的情况可以看作是“受信任的客户端”,因此不需要重定向流(混合,隐式),这对于使用机器对机器(api)来说是完全可以的。
在混合或隐式的任何JWT结果中,用户信息仍然公开可用(只需转到https://jwt.io/对其进行解码),因此用于标识用户的内容至关重要。