如何在 API 网关中结合用户身份验证和 client-level 身份验证?

How to combine user- and client-level authentication in an API gateway?

我们正在寻求实施 Web(外部用户)SSO 和 API 网关以支持 Web 应用程序和移动应用程序,以及可能的第 3 方应用程序甚至 B2B 场景。

我的想法是让 SSO 网关处理 user-level 对网站和 API 的访问,使用 OAuth 或 OpenID Connect 对最终用户进行身份验证。

对于任何 API URL,位于此后面的是 API 网关。这是为了使用诸如客户端 ID 和密码之类的东西来处理 client-/application-level 身份验证。

这个想法是用户登录网站或移动应用程序,然后 if/when 该应用程序需要调用 API 它需要发送自己的凭据(客户端凭据流)以及证明用户身份的不记名令牌(资源所有者密码流)。

客户端凭据与安全性无关,而更多地与 coarse-grained 对 API 功能的访问有关,从而提供 API 使用情况、流量调整、SLA 等的可见性,但用户身份需要在下游执行 data-level 授权。

我看过的大多数 API 网关似乎只支持单一级别的身份验证,例如我们目前正在研究 Apigee 可以使用 OAuth 进行身份验证来处理用户或应用程序,但目前尚不清楚如何同时执行这两项操作。

有没有什么方法可以让 SSO 网关的用户持有者令牌与 API 网关的客户端持有者令牌或凭据很好地配合使用,最好是以一种相当 standards-based 的方式?还是我们只需要对其进行破解,以便一个通过 auth header 而另一个通过 payload?或者有没有一种方法可以同时满足两种目的?

令我感到惊讶的是,在身份管理(OAuth2、OpenID Connect、UMA 等)方面正在进行的所有工作中,没有人在寻找一种同时处理多级身份验证的方法——用户、客户端、设备等

不幸的是,我没有足够的声望点数来评论之前的post,所以我会在这里加上我的两分钱。全面披露:我为 Apigee 工作。

http://apigee.com/docs/api-services/content/oauthv2-policy#accesstokenelement 解释了如何在授权 header 以外的地方为 Apigee OAuthV2 政策提供访问令牌。如果您已将 SSO 不记名令牌存储为 Apigee OAuth 令牌的属性,那么在验证 Apigee 令牌后,您将自动获取 SSO 不记名令牌作为流变量,并可以根据需要使用它。

例如,如果您在请求中将令牌作为 "token" 查询参数发送,您可以在 OAuthV2 策略中编写以下代码

request.queryparam.token

策略将从该查询参数中提取它。