我有一个WebAPI解决方案,通过[Authorize]属性保护它的控制器方法。它验证给定用户是否具有适当的角色,这些角色基本上来自IdentityServer3。
有几个单页应用程序客户端与此WebAPI交互,客户端用户使用隐式流进行身份验证/授权。
到目前为止标准简单,一切正常......
现在我需要后台进程来调用同一个WebAPI。这有效地成为机器到机器的通信。根据我读过的所有文档,这是Client Credentials流程的一种情况。没有用户参与。
问题......
鉴于没有涉及用户,这也意味着没有主题,没有主张,显然没有任何角色。如果我没有弄错,客户没有索赔。由于我的控制器方法是由角色保护的,那么如何授权此类客户端使用服务/资源?
我读到客户端应该只有一个流程,但资源呢?客户端使用的流程对资源不重要,除了访问令牌根据客户端流程没有声明。因此,在该上下文中,当流量受到索赔的保护时,流量也与资源相关。我困惑了吗?
我应该专门为客户端凭据流创建新服务吗?设置身份服务器以支持客户端的声明?
我在这里寻找最佳实践。
修改
还请参考这个Github讨论...... Issue 76
如果主题为空 - 没有人参与。
我们不打算为客户提出索赔。客户身份 和范围应该足够了。
leastprivilege
另请参阅...... Issue 79
嗯 - 一般来说,客户端应该只有一个流程 如果错误的流组合,会导致安全问题 已配置(例如代码和隐式)。
leastprivilege
答案 0 :(得分:0)
您可能与Client Credentials流中的用户角色声明(细粒度授权)不完全匹配,但解决方法很少:
另请查看Token Introspection(以及Dominick发布的相关视频)以进一步了解。这也概述了资源服务器的作用。