我有一个 WebAPI 解决方案,可以通过 [Authorize] 属性保护其控制器方法。它验证给定用户是否具有适当的角色,这些角色基本上是来自 IdentityServer3 的声明。
有多个单页应用程序客户端与此 WebAPI 交互,并且使用隐式流对客户端用户进行身份验证/授权。
到目前为止非常标准和简单,一切都很好......
现在我需要后台进程来调用同一个 WebAPI。这实际上成为机器对机器的通信。根据我读过的所有文档,这是客户端凭据流程的情况。没有用户参与。
问题...
鉴于不涉及任何用户,这也意味着没有主题、没有声明,显然也没有角色。如果我没记错的话,客户没有索赔。由于我的控制器方法是由角色保护的,那么如何授权这样的客户端使用服务/资源呢?
我读到客户端应该只有一个流,但是资源呢?客户端使用的流对于资源来说应该不重要,除了访问令牌不会根据客户端流进行声明。因此,在这种情况下,当资源受到声明保护时,流程也与资源相关。我很困惑吗?
我应该专门为客户端凭据流创建一项新服务吗?操纵身份服务器来支持客户端的声明?
我在这里寻找最佳实践。
Edit
另请参阅此 Github 讨论...Issue 76 https://github.com/IdentityServer/IdentityServer3/issues/76
如果主体为空——则没有人参与。
我们不打算为客户提出索赔。客户身份
并且范围应该足够了。
最低权限
另请参阅...Issue 79 https://github.com/IdentityServer/IdentityServer3/issues/79#issue-33235316
嗯 - 一般来说,客户端应该只有一个流,因为它可以
如果错误的流组合会导致安全问题
配置(例如代码和隐式)。
最低权限
您可能与客户端凭据流程中的用户角色声明(细粒度授权)不完全匹配,但有一些解决方法:
- 使用向客户端发出的范围声明来做出授权决策(请参阅此 Identity Server文档 https://identityserver.github.io/Documentation/docs/overview/mvcGettingStarted.html- 具体在注册 Web API 下)
- 根据访问令牌中的受众(“aud”)声明,您可以放弃通常检查用户令牌的授权决策
还可以看看代币自省 https://leastprivilege.com/2015/11/25/reference-tokens-and-introspection/(以及多米尼克发布的相关视频)以供进一步了解。这也概括了资源服务器的作用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)