当前位置: 首页 > 知识库问答 >
问题:

如何将认知身份池与API网关集成?

江浩慨
2023-03-14

我有一个关于Cognito和API网关集成的问题,我希望你能帮助我。我正在考虑制作一个应用程序,我希望与第三方(Facebook,Twitter...)进行身份验证,所以我放弃了Cognito用户池,然后我有了Cognito身份池,但这是我怀疑增长的地方。

  • 如何将其与API网关集成

谢谢你的帮助

共有2个答案

满玉泽
2023-03-14

如果授权程序设置为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。

郎鸿
2023-03-14

如何将其与API网关集成?

  • 对于Cognito标识池,将方法上的授权类型设置为AWS_IAM

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

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

如果我不使用自定义授权程序,如何根据用户配置文件(管理员,客户端...)限制对API方法的访问?

  • 更熟悉Cognito的人可能会回答得更好,但我相信您只能设置“已验证角色”和“未验证角色”。因此,当用户与外部提供者进行身份验证时,他们将获得“已验证角色”,仅此而已。我不确定标识池中是否支持用户组(管理员、客户端)(用户池中是否支持)

编辑:也许这会有帮助http://www.slideshare.net/AmazonWebServices/securing-serverless-workloads-with-cognito-and-api-gateway-part-i-aws-security-day

 类似资料:
  • 文档在控制台中的操作非常清楚,https://docs.aws.amazon.com/apigateway/latest/developerguide/integrating-api-with-aws-services-s3.html,但在CDK中复制真的很痛苦。 我的问题是如何在CDK中创建一个以s3(中间没有lambda)为支持的RESTAPI,或者至少如何创建apigateway。AWS整合

  • 我想通过Spring Cloud介绍Zuul作为一个API网关在少数服务前面。 我关心的问题: > 网关将位于许多服务的前面 某些服务可能公开不需要身份验证的endpoint null

  • 我试图让我的API网关与Cognito用户池授权器一起工作,但我似乎无法让它工作。我现在没有使用任何SDK。一些细节-对于Cognito pool,我将设置ID provider设置为Cognito user pool,Oauth flow'impilicit grant‘和scope设置为'openid'。创建了一个应用程序(&domain),还生成了客户端机密。电子邮件是唯一的字段。-在API

  • 我试图将AWS API网关与AWS lambda函数集成。集成工作完美无缺,直到我在集成请求中使用“Lambda代理集成”。 当我在集成请求中选中“使用Lambda代理集成”时,我开始得到: “由于配置错误,执行失败:Lambda代理响应格式错误” 我在谷歌上搜索了一下,意识到我需要以某种格式返回响应: 然而,尽管如此,我仍然看到同样的错误。我做错了什么? 这就是我的Lambda函数的样子: 当我

  • 我想使用Cognito用户池作为标识提供者。我对我的用户进行身份验证。然后,我尝试通过以下步骤将该用户与用户池中的用户集成: http://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-integration-user-pools-with-identity-pools.html 我已经用绳子代替了敏感的部分。我已

  • 我试图创建一个短信机器人使用Twilio,Aws API网关和Aws Lambda的帮助。 网址:https://xxxxxxx.execute-api.us-west-2.amazonaws.com/latest/ 参数fromcity=Moorestown&to=%2b18569246402&fromzip=08057&body=hello&toCountry=us&fromstate=nj&