如何在API网关中组合用户和客户端级别的身份验证?

时间:2015-07-21 00:55:08

标签: api authentication oauth single-sign-on apigee

我们希望实施网络(外部用户)SSO和API网关,以支持网络应用和移动应用,以及潜在的第三方应用甚至B2B方案。

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

对于任何API URL,位于此后面的是API网关。这旨在使用客户端ID和密钥等方式处理客户端/应用程序级别的身份验证。

SSO/API gateway

想法是用户登录网站或移动应用程序,然后如果/当该应用需要调用API时,它需要发送自己的凭据(客户端凭证流)以及持有者令牌证明用户也是谁(资源所有者密码流)。

客户端凭证更少涉及安全性,而更多地涉及对API函数的粗粒度访问,提供API使用,流量整形,SLA等的可见性,但需要用户身份来强制下游的数据级授权。

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

有没有办法让SSO网关的用户承载令牌与API网关的客户端承载令牌或凭证很好地配合,最好采用基于标准的方式?或者我们只是必须破解它,以便在auth标头和另一个在有效负载中通过?或者有没有办法采用可以同时满足这两个目的的组合方法(例如混合承载令牌)?

我对于身份管理(OAuth2,OpenID Connect,UMA等)中的所有工作都感到惊讶,没有人正在寻找一种同时处理多级身份验证的方法 - 用户,客户端,设备等等。

1 个答案:

答案 0 :(得分:1)

不幸的是,我没有足够的声望点对前一篇文章发表评论,所以我在这里加上我的两分钱。完全披露:我为Apigee工作。

http://apigee.com/docs/api-services/content/oauthv2-policy#accesstokenelement说明了如何在授权标头以外的位置为Apigee OAuthV2策略提供访问令牌。如果您已将SSO持有者令牌存储为Apigee OAuth令牌的属性,则在验证Apigee令牌后,您将自动获取SSO持票人令牌作为流变量并可根据需要使用它。

例如,如果您将令牌发送为"令牌"您可以在OAuthV2策略中对以下内容进行编码的请求中的查询参数

request.queryparam.token

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