如何将Cognito身份池与API网关集成



我对Cognito和Api Gateway的集成有一个疑问,我希望您可以帮助我。我正在考虑制作一个应用程序,我希望与第三方(Facebook,Twitter ...)进行身份验证过程,因此我丢弃了Cognito用户池,然后我有Cognito Identity池,但这就是我的疑问增长的地方。/p>

  • 如何将其与API网关集成?
  • 我是否应该使用API网关自定义授权器来管理Cognito生成的令牌?
  • 如果我不使用自定义授权器,我如何根据用户配置文件(admin,client ...)限制对API方法的访问?

感谢您的帮助

如何将其与API网关集成?

  • 对于Cognito身份池,您将在方法上的授权类型设置为AWS_IAM

我是否应该使用API网关自定义授权器来管理Cognito生成的令牌?

  • 有了身份池,这是不可能的。您必须使用AWS_IAM授权。您将可以访问后端电话的Cognito ID。

如果我不使用自定义授权器,我如何根据用户配置文件(admin,client ...)限制对API方法的访问?

  • 一个更熟悉的人的Cognito将能够更好地回答,但我相信您只能设置"身份验证的角色"one_answers"未经身份验证的角色"。因此,当用户使用外部提供商进行身份验证时,他们会获得"身份验证的角色",仅此而已。我不确定身份池中的用户组(管理员,客户端)是否有支持(用户池中有支持)。

编辑:也许这将有助于http://www.slideshare.net/amazonwebservices/securing-serverless-workloads-cognito-and-and-api-gateway-gateway-part-part-part-i-aws-aws-aws-aws-security-day

如果将授权器设置为AWS_IAM,则可以使用AWS-SDK向API网关生成签名的请求。首先获得一些临时凭据,然后创建一个签名请求。

获取凭据(示例使用JavaScript SDK):

var AWS = require('aws-sdk')
var cognitoidentity = new AWS.CognitoIdentity();
var makeSignedRequest = async function () {
    var params = {
      IdentityId: 'STRING_VALUE', /* required */
      CustomRoleArn: 'STRING_VALUE',
      Logins: {
        '<IdentityProviderName>': 'STRING_VALUE',
        /* '<IdentityProviderName>': ... */
      }
    };
    var credsForIdentity = await cognitoidentity.getCredentialsForIdentity(params).promise()
    var httpRequest = new AWS.HttpRequest("https://<API_GATE_WAY_ENDPOINT", "<region>");
    httpRequest.headers.host = "<API_GATE_WAY_ENDPOINT>"; // Do not specify http or https!!
    AWS.config.credentials = {
        accessKeyId: creds.Credentials.AccessKeyId,
        secretAccessKey: creds.Credentials.SecretKey,
        sessionToken: creds.Credentials.SessionToken
    }
    httpRequest.method = "POST";
    httpRequest.body = JSON.stringify(data)
    var v4signer = new AWS.Signers.V4(httpRequest, "execute-api");
    v4signer.addAuthorization(AWS.config.credentials, AWS.util.date.getDate());
    const rawResponse = await fetch(httpRequest.endpoint.href , {
        method: httpRequest.method,
        headers: httpRequest.headers,
        body: httpRequest.body
    });

}

此示例并不完美,但它是AWS签名请求的一个很好的起点。

当然,不要忘记给您的身份验证身份提供适当的权限,以便他们可以调用API。

相关内容

  • 没有找到相关文章

最新更新