AWS Cognito HTTP身份验证

jju*_*9jj 1 amazon-web-services amazon-iam amazon-cognito aws-api-gateway

我尝试使用AWS API Gateway,Lambda和Cognito设置测试API,以确保访问安全。由于我是AWS领域的新手,因此我不确定如何使用例如 我首先必须通过Cognito和客户端登录的客户端上的请求库创建到AWS服务的“已登录”发布请求。AWS Api,然后使用我得到的信息来创建一个已签名的请求,如下所示:http : //docs.aws.amazon.com/general/latest/gr/sigv4_signing.html

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

e-n*_*uri 5

前言:我将解释Google+与Cognito集成的流程,其他流程几乎相同。我将使用node.js(javascript),之后,您可以让您的用户从Google进行身份验证,并获得IAM和Cognito的授权以访问API网关。

Cognito是联合登录服务,它为您提供了同步移动/ Web应用程序的“配置”的功能。首先,您必须使用身份提供商来设置Cognito,例如说Google+。为了那个原因:

  1. 在开发人员控制台中创建Google应用
  2. 在cognito中创建一个池,并将google添加为提供者,为池配置策略和角色(您要授予用户访问权限的服务,在此情况下仅是API Gateway)。
  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);
Run Code Online (Sandbox Code Playgroud)
  1. 获取该Identity的IAM临时凭据IdentityId,您的Google身份验证用户:
var params = {
  IdentityId: IdentityId,
  Logins: {
    'accounts.google.com': google_token // Coming from Google OAuth2
  }
}
cognitoIdentity.getCredentialsForIdentity(params, resolverFunction)
Run Code Online (Sandbox Code Playgroud)
  1. 您的用户现已通过Google身份验证,并获得了IAM服务的授权(通过您附加到Cognito池的角色/策略)。
  2. 在您的API网关中,激活IAM授权,并使用从第7点获得的凭据。
  3. 使用Accesskey,secretKey和令牌来签名对基于API网关构建的API的每个请求,您可以使用以下lib:aws-v4-sign-small

快速说明和注意事项:

  • 所有这些都是异步操作,因此,如果您使用的是Node js,则最好使用Promises(ES6或Bluebird)。
  • 非常注意您附加的角色(访问dynamodb文档或S3文件等。有关IAM的更多信息,它对您有所帮助,并且您可以进行精细的授权)

希望它是明确的,或者至少它为您提供一个开始的方向。