AWS Cognito HTTP 身份验证



我尝试使用AWS API Gateway,Lambda和Cognito设置测试API,以确保访问安全。由于我是 AWS 世界的新手,因此我不确定如何使用请求库等方式创建对 AWS 服务的"登录"发布请求我想在客户端,我首先必须通过 Cognito 和 AWS API 登录,然后使用我获得的信息创建一个签名请求,如下所示:http://docs.aws.amazon.com/general/latest/gr/sigv4_signing.html ?

如果我走错了路,请告诉我并指出正确的方向:)

前言:我将解释Google+与Cognito集成的流程,其他人几乎也是如此。我将使用node.js(javascript),之后你可以让你的用户从谷歌进行身份验证,并由IAM和Cognito授权访问API网关。

Cognito是一种联合登录服务,它为您提供同步移动/Web应用程序的"配置"。首先,您必须使用身份提供商设置cognito,例如Google+。为此:

  1. 在开发者控制台中创建 Google 应用
  2. 在 cognito 中创建一个池并将 google 添加为提供商,使用策略和角色(您希望授予用户访问权限的服务,在本例中仅为 API 网关)配置池。
  3. 在您的网络/移动应用中,向用户显示Google+登录按钮,用户点击后,google会回调一个带有代码参数code的回调网址,使用该令牌
  4. 使用此代码为您的用户获取 Cognito 身份,在本例中,我们信任 Google:
var params = {
  IdentityPoolId: setting.POOL_ID,
  Logins: {
    'accounts.google.com': google_token  // Coming from Google OAuth2
  }
}
// Get Id from Cognito
cognitoIdentity.getId(params, resolverFunction);
  1. 获取该身份IdentityId的 IAM 临时凭证,您的 Google 身份验证用户:
var params = {
  IdentityId: IdentityId,
  Logins: {
    'accounts.google.com': google_token // Coming from Google OAuth2
  }
}
cognitoIdentity.getCredentialsForIdentity(params, resolverFunction)
  1. 您的用户现已通过 Google 身份验证,并已获得 IAM 服务的授权(通过您附加到 Cognito 池的角色/策略)。
  2. 在您的 API 网关中,激活 IAM 授权,并使用您从第 7 点获得的凭证。
  3. 使用访问密钥、私有密钥和令牌对您构建在 API 网关之上的 API 发出的每个请求进行签名,您可以使用以下库:aws-v4-sign-small

快速笔记和提示:

  • 所有这些都是异步操作,所以如果你在节点js中,最好使用Promises(ES6或Bluebird)。
  • 特别注意您附加的角色(访问 dynamodb 文档或 S3 文件等,阅读有关 IAM 的更多信息,它很有帮助,您可以进行细粒度的授权)

希望它是清楚的,或者至少它给你一个开始的方向。

使用 API

网关的好处之一是,您可以为您的 API 自动生成 SDK,这些 SDK 可以轻松地与 Cognito 凭据集成。这使您免于自己实现 SigV4 身份验证的麻烦。

以下是将 Cognito 凭据与生成的 JavaScript SDK 结合使用的几个简单示例:

  1. https://github.com/rpgreen/aws-recipes/blob/master/app/index.html
  2. https://github.com/awslabs/api-gateway-secure-pet-store

干杯莱恩

正如Ryan所提到的,最好的方法是通过API Gateway SDK。 使用此堆栈的缺点是它更难与现成的前端工具集成。 您不能再直接向 REST 端点发出请求,您需要通过 SDK。

你肯定会失去一些开发的便利性,因为你不能只是在端点上打上像ngResource这样的东西,然后把它称为一天。 您必须自己设置对服务层中每个 AWS 终端节点的调用。

相关内容

  • 没有找到相关文章

最新更新