WebAPI混合隐式流和客户端凭据流

时间:2016-05-17 15:32:16

标签: openid-connect identityserver3

我有一个WebAPI解决方案,通过[Authorize]属性保护它的控制器方法。它验证给定用户是否具有适当的角色,这些角色基本上来自IdentityServer3。

有几个单页应用程序客户端与此WebAPI交互,客户端用户使用隐式流进行身份验证/授权。

到目前为止标准简单,一切正常......

现在我需要后台进程来调用同一个WebAPI。这有效地成为机器到机器的通信。根据我读过的所有文档,这是Client Credentials流程的一种情况。没有用户参与。

问题......

鉴于没有涉及用户,这也意味着没有主题,没有主张,显然没有任何角色。如果我没有弄错,客户没有索赔。由于我的控制器方法是由角色保护的,那么如何授权此类客户端使用服务/资源?

我读到客户端应该只有一个流程,但资源呢?客户端使用的流程对资源不重要,除了访问令牌根据客户端流程没有声明。因此,在该上下文中,当流量受到索赔的保护时,流量也与资源相关。我困惑了吗?

我应该专门为客户端凭据流创建新服务吗?设置身份服务器以支持客户端的声明?

我在这里寻找最佳实践。

修改

还请参考这个Github讨论...... Issue 76

  

如果主题为空 - 没有人参与。

     

我们不打算为客户提出索赔。客户身份   和范围应该足够了。

     

leastprivilege

另请参阅...... Issue 79

  

嗯 - 一般来说,客户端应该只有一个流程   如果错误的流组合,会导致安全问题   已配置(例如代码和隐式)。

     

leastprivilege

1 个答案:

答案 0 :(得分:0)

您可能与Client Credentials流中的用户角色声明(细粒度授权)不完全匹配,但解决方法很少:

  • 使用发给客户的Scope声明作出授权决定(请参阅此Identity Server documentation - 特别是在注册Web API下)
  • 根据访问令牌中的受众(" aud")声明,您可以放弃通常检查用户令牌的授权决策

另请查看Token Introspection(以及Dominick发布的相关视频)以进一步了解。这也概述了资源服务器的作用。

相关问题