将3scale与共享OAuth授权服务器

时间:2015-06-02 07:00:58

标签: api oauth openid-connect 3scale

我有一个网站 mywebsite.com ,用户可以在其中登录。登录是通过将未经身份验证的会话重定向到 ssologin.com 上的SSO提供商来处理的,验证凭据,然后使用访问令牌重定向回mywebsite.com,以便它可以创建本地会话。

该网站是一个单页网络应用程序,它使用JavaScript调用通过API网关3scale公开的API。

我想了解的是我如何获得3scale来兑现发给网站的OAuth访问令牌。我认为它应该足够简单,因为3scale似乎将其委托给授权网址,但我不确定这背后的机制以及它是否正在做我期待的事情。 / p>

任何人都可以解释 - 以及如何 - 我可以这样做吗?我已经阅读了文档,但我无法理解它,因为它掩盖了OAuth访问令牌被授予后发生的事情,并且它没有触及令牌可能出现的情况在带外创建(即在3scale之外)。

我认为我想在这种情况下使用的流程是客户端网络应用程序/隐式授权流程,但如果我错了,请纠正我。

我试图破译帮助文件,但我仍然有一堆问题:

  • 我假设我将3scale OAuth登录URL配置为mywebsite.com重定向到的完全相同的URL?或者我是否需要一个不同的页面来处理不同的逻辑,而且API调用的事实通常不是交互/面向用户的?
  • 用户通过可用于后续API调用的ssologin.com OAuth登录页面登录网站后是否返回访问令牌,或者3scale是否需要自己的令牌,因此需要自己的登录重定向? (状态是否存储在网关中的任何位置?)
  • 如何将访问令牌传递给API调用:作为参数,作为HTTP标头,还是通过其他一些机制?

实际上我喜欢做的事实上是使用OpenID Connect并获取ID令牌,但3scale本身并不支持这一点。我有什么办法可以用3scale来伪装它并仍然返回一个ID令牌,有效地使它像OpenID Connect一样吗?

1 个答案:

答案 0 :(得分:4)

TL; DR:使用3scale API调用来存储access_tokens,以便它们将被3scale尊重:https://github.com/3scale/nginx-oauth-templates/tree/master/oauth2

curl -X POST "http://su1.3scale.net/services/<SERVICE_ID>/oauth_access_tokens.xml?provider_key=<PROVIDER_KEY>&app_id=<CLIENT_ID>&token=<TOKEN>&ttl=<TTL>"

3scale提供了许多用于管理访问令牌的API调用,包括存储和删除访问令牌。 您可以在此处找到这些API调用的列表,以管理自述文件中的访问令牌:https://github.com/3scale/nginx-oauth-templates/tree/master/oauth2

因此,您应该能够将在3scale之外发出的访问令牌与应用程序(可能是您的单页Web应用程序)相关联,并将该访问令牌用于授权目的。实际上,3scale并不会生成访问令牌,而API Gateway也是如此。

这一切都是为了检查使用给定访问令牌的3scale中的应用程序是否被授权调用给定的API端点,即仅授权而不是身份验证和/或身份验证。当用户登录时,用户身份验证应该都在3scale之外完成。

3scale为API网关提供了许多配置模板,具体取决于您要实现的流程以及您是希望由API网关(令牌生成文件夹)还是由外部OAuth提供程序生成令牌(否) -token-generation文件夹。)您可以在此处找到这些模板,并提供有关它们如何在每个不同的流文件夹中工作的一些说明:https://github.com/3scale/nginx-oauth-templates/tree/master/oauth2。由于您拥有自己的OAuth提供程序来生成访问令牌,因此您需要使用这些模板而不是在3scale中的Integration页面内生成的文件。

回答您的具体问题:

  • OAuth登录网址应该是一个页面(在ssologin页面后面保护),允许您的用户授权/拒绝访问通过API访问其资源的应用程序。看起来您的SSO提供程序不需要这样,所以它似乎遵循资源所有者密码流。

  • 在此流程(资源所有者密码)中,在API网关上调用/ oauth / token端点时返回访问令牌。然后,网关将调用外部OAuth提供商的访问令牌端点(带有相关参数),一旦收到访问令牌,它就会将其存储在3scale中并将其返回给调用应用程序。对于其他流,它将由API网关发送到重定向URL。 但是,如果您的SSO提供商已经向您的应用程序的重定向网址返回了访问令牌,则可以执行以下操作:

    1. 调用3scale端点以直接从您的应用程序
    2. 存储返回的访问令牌
    3. 使SSO提供程序的redirect_url成为API网关,而不是您的应用程序,以便它将访问令牌存储在3scale中,并将access_token也发送回您的应用程序。这将需要自定义API网关配置模板。
  • 完全取决于您发送访问令牌的位置。但是,您必须在Nginx配置模板中配置此位置,以便正确提取访问令牌。例如https://github.com/3scale/nginx-oauth-templates/blob/master/oauth2/resource-owner-password-flow/no-token-generation/nginx.lua#L198-L207https://github.com/3scale/nginx-oauth-templates/blob/master/oauth2/resource-owner-password-flow/no-token-generation/nginx.lua#L312

最终,Gateway可以位于您的应用程序和访问令牌发行者之间,以便在3scale中捕获并存储这些内容,从而调解整个交换。 3scale中唯一的限制是访问令牌格式,它必须是最多256个字符长的字母数字字符串。

相关问题