如何使用 AWS API Gateway 设置 OAuth2 身份验证提供程序?

Posted

技术标签:

【中文标题】如何使用 AWS API Gateway 设置 OAuth2 身份验证提供程序?【英文标题】:How to set up an OAuth2 Authentication Provider with AWS API Gateway? 【发布时间】:2015-11-21 01:55:05 【问题描述】:

AWS 有一个API Gateway,它让设置、管理和监控您的 API 变得非常容易。 但是,您可以为资源方法设置的安全授权设置仅限于 AWS-IAM(据我了解,这是一个内部 *** 角色?)。

似乎我对这个主题的研究一直指向我设置一个AWS Cognito pool,但是当我在我的aws控制台中配置一个时,提供者的选项是:AmazonFacebook、@ 987654325@、TwitterOpenIDCustom。我想,在那种情况下,我会使用Custom?然后将我自己的 EC2 实例设置为 OAuth2 身份验证提供程序服务器。

考虑到 Oauth2 近来如此流行,令我惊讶的是没有 AWS 服务可以做到这一点;看来他们已经走了整个 OpenId 或 SAML 路线。令我惊讶的是,缺乏关于如何在云中快速设置 Oauth2 提供程序的指南。

任何帮助将不胜感激。

【问题讨论】:

您找到解决方案了吗? 不幸的是,没有。我决定不使用 OAuth 那么您是如何决定对 AWS API 进行身份验证的? 使用反向代理 【参考方案1】:

(1) 您想在 API Gateway 上实现 OAuth 2.0 端点(authorization endpoint 和 token endpoint)吗?换句话说,您真的要在 API Gateway 上实现 OAuth 2.0 服务器 (RFC 6749) 吗?

(2) 或者,您想保护您在 API Gateway 上通过 OAuth 2.0 access token 实现的 Web API?

这两个是完全不同的东西。

因为您似乎想选择 OAuth 2.0 而不是 AWS-IAM,所以我猜您想要做的是 (2)。如果是这样,您可以在此处找到示例:Amazon API Gateway + AWS Lambda + OAuth


更新于 2016 年 4 月 6 日

2016 年 2 月 11 日,AWS Compute Blog、“Introducing custom authorizers in Amazon API Gateway”的博客文章宣布,Custom Authorizer 已被引入 Amazon API Gateway。由于这种机制,基于 Amazon API Gateway 构建的 API 可以将客户端应用程序提供的 Bearer 令牌(例如 OAuth 或 SAML 令牌)的验证委托给外部授权方。

“Amazon APi Gateway Custom Authorizer + OAuth”中描述了如何通过 OAuth 访问令牌利用新机制 Custom Authorier 来保护基于 Amazon API Gateway 构建的 API。


仅供参考:

OAuth 2.0 是一种授权机制,而不是身份验证机制。但是人们经常使用 OAuth 2.0 进行身份验证,并且有许多软件库和服务使用 OAuth 2.0 进行身份验证。

Cognito (Identity) 是一种与身份验证相关的解决方案,而不是授权。

Cognito 中的自定义是指定 OpenID Connect 提供者的地方。 OpenID Connect 是一种身份验证解决方案。让事情变得复杂的是“OpenID Connect 建立在 OAuth 2.0 之上”。详情请见OpenID Connect site。

【讨论】:

我想使用 AWS 服务轻松注册外部用户,以便在通过我的 API 网关与我的 API 集成时使用 OAuth2 标头和工作流进行身份验证和分配授权。所以我猜#2。 OAuth 2 不仅用于授权。 “资源所有者密码”流程用于身份验证。如前所述,OpenID Connect 用于身份验证,旨在弥补 OAuth 2 的一些缺陷。 为了更好地理解,是否正确地说通过使用自定义授权者,我们不需要依赖使用 oauth /delegate 发布请求获取委托令牌,然后签名和使用用于发出 AWS api 请求?换句话说,我可以直接使用 id_token 作为承载头发出 aws rest api 请求,而不是先获取委托令牌? 在使用自定义授权方的流程中,谁生成并验证 OAuth 令牌?我们是否需要在 Lambda 函数中编写代码才能与第三方 IDP 集成?【参考方案2】:

AWS API Gateway 支持 Amazon Cognito OAuth2 范围 now。您可以创建 Amazon Cognito 用户池授权方并将其配置为您的 Authorisation method in API Gateway. 为了使用 OAuth 范围,您需要为您的 Cognito 用户池配置一个 resource server and custom scopes。 您可以在 Cognito 用户池中配置多个具有不同范围的 app clients,或者在对用户池中的用户进行身份验证时从您的应用程序代码中请求不同的范围。根据从 Cognito 收到的access token 中的范围,API Gateway 将允许/拒绝 API 的调用者。可以找到实现此功能的分步指南here

【讨论】:

以上是关于如何使用 AWS API Gateway 设置 OAuth2 身份验证提供程序?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 AWS CloudFormation 在 AWS API Gateway 上应用安全策略?

是否可以使用 AWS API 为 Lambda 函数设置 AWS API Gateway 端点?

AWS Api Gateway 未在 204 上设置 CORS

如何使用 AWS CloudFormation 在 AWS API Gateway 集成中指定阶段变量?

AWS API Gateway:如何实现持续交付?

使用 API Key 或 Authorizer 授权 AWS API Gateway