IdentityServer3客户端到客户端授权

时间:2016-06-21 13:13:23

标签: identityserver3

我正在我们公司实施IdentityServer3的过程中,但我对如何处理客户端到客户端授权感到茫然,并希望任何指针都朝着正确的方向发展。

这是我们要求的摘要:

  • 我们有多个网站客户端供我们的用户访问。这些是使用AuthorizationCode流配置的。让我们称这些 WebSiteClientA WebSiteClientB
  • 我们有多个WebAPI客户端作为后端服务,可由客户端访问( WebSiteClientA WebSiteClientB )或用户(有权访问 WebSiteClientA WebSiteClientB )。让我们称之为 WebAPIClientA

注意:我们公司拥有用户身份以及所有客户。

最初,我可以使用ClientCredentials流配置 WebAPIClientA 。然后 WebSiteClientA \ WebSiteClientB 将配置 WebAPIClientA 并且可以在需要访问 WebAPIClientA 时生成访问令牌,或者生成具有有限范围的访问令牌,并将此访问令牌交给用户,以便用户可以直接从客户端访问 WebAPIClientA

这几乎可以满足我们的所有要求,除了一个大的,我们还希望能够管理客户端可以访问另一个客户端的范围,并且使用ClientCredentials流程的方法任何具有客户端凭据的人都将是能够为该客户端下的所有范围生成访问令牌。即 WebSiteClientA 应该能够为 WebAPIClientA 生成一个访问令牌,其中包含read&写作范围,但 WebSiteClientB 应该只能为读取范围的 WebAPIClientA 生成访问令牌。

在我看来,客户端\身份服务器会话将是: WebSiteClientA 向身份服务器发出请求,要求获取范围X的 WebAPIClientA 访问令牌并提供客户端密钥对于 WebSiteClientA 。身份服务器然后说是,您是 WebSiteClientA ,我们可以从记录中看到您有权访问 WebAPIClientA 在范围X中,这是一个访问令牌。

这是可能的,还是我以完全错误的方式看待这个问题,并且可能有更好的方法来满足要求?

1 个答案:

答案 0 :(得分:1)

听起来你在谈论两件事。

首先,在API中您需要用户的ID。要获取用户ID,您可以决定是否要构建受信任的子系统,或者您不想要受信任的子系统(从某种意义上说,您的API信任或不信任MVC客户端通过沿着用户的标识符)。如果您执行受信任的子系统,那么从MVC客户端到API的客户端凭据流就可以了。如果您不想要受信任的子系统,那么您需要MVC客户端为用户获取访问令牌(通过隐式或混合流)。

您要问的第二个问题是,您是否可以控制每个客户端可以请求的范围,您可以通过AllowedScopes配置属性(或其他任何调用的属性)客户端配置。该设置与上述第一个问题正交。