gpt4 book ai didi

amazon-web-services - 通过链接 API key 、使用计划和 Cognito 构建可计费的 API

转载 作者:行者123 更新时间:2023-12-03 09:33:52 24 4
gpt4 key购买 nike

我一直在使用 AWS API Gateway、Lambda 和无服务器框架构建无服务器 REST API。我想建立一个用户注册的网站,选择一个 API 计划(免费、基本、专业)并获得相应的长期 API key ,他们可以使用该 key 每月查询一定次数的无服务器 API。

我知道使用 Cognito 和自托管 UI,您可以使用 CUP(Cognito 用户池) token 轻松处理用户身份验证,这些 token 实际上是 Json Web token 。我想自动创建 API key 并将其关联到使用计划,然后关联到 Cognito 用户。

第一部分很简单:使用 AWS Javascript SDK,只需执行以下操作:

var params = {
keyId: 'whateverKeyId', /* required */
keyType: 'API_KEY', /* required */
usagePlanId: 'whateverUsagePlanId' /* required */
};
apigateway.createUsagePlanKey(params, function(err, data) {
if (err) console.log(err, err.stack); // an error occurred
else console.log(data); // successful response
});

我在第二部分苦苦挣扎......我应该将 API key 作为自定义属性添加到用户池中吗?但是,我真的不知道如何检索 API key 。 documentation不是很清楚。注册后将用户和API Key添加到我自己的DynamoDB数据库中(这真的会浪费Cognito)?

老实说,这看起来很常见,而且我花了三天时间在互联网上寻找解决方案却没有成功这一事实让我觉得有些事情我不明白......

预先感谢您的意见!

最佳答案

将 API key 添加为 Cognito 用户池中的自定义属性是一个不错的选择。

每次您的用户登录时,cognito 都会以 JWT 格式返回一个 ID token 。
从此 token 中,您可以检索 cognito 用户的属性,包括自定义属性和默认属性。
您可以在此处找到 Cognito token 的更多详细信息:

https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-using-tokens-with-identity-providers.html



https://aws.amazon.com/premiumsupport/knowledge-center/decode-verify-cognito-json-token/

那么你可以做什么:

  • 创建 AWS API 网关。创建授权方并将其与您的 AWS 认知池连接。在每个为您的 API 资源的请求方法中,选择这个新的授权方,以便在用户每次调用您的 API 时对其进行授权。
  • 当您的用户登录 cognito 时,cognito 会以 JWT 格式返回我上面描述的 ID token ,并在您进行 API 调用时将此 JWT token 作为 header 传递。
  • 如果您执行上述步骤,则此 JWT token 将传递给您的 Lambda 函数,并且您可以在 lambda 函数中检索 cognito 自定义属性(API key ):
    const API_ID = event.requestContext.authorizer.claims['custom:apiid'];

  • 上面的行从您的 API 授权方 header 中检索 JWT,然后检索您在 cognito 中创建的自定义属性,该属性称为“apiid”或您想要的名称。

    关于amazon-web-services - 通过链接 API key 、使用计划和 Cognito 构建可计费的 API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59789847/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com