使用 Cognito 在 AWS Api Gateway 中验证用户

Posted

技术标签:

【中文标题】使用 Cognito 在 AWS Api Gateway 中验证用户【英文标题】:Autetificate users in AWS Api Gateway with Cognito 【发布时间】:2022-01-12 14:50:42 【问题描述】:

我想使用 Aws Rest Api Gateway 构建一个 rest api。这将是已经投入生产的 api 的新版本(托管在私有服务器上)。

在当前版本的 api 中,我们使用 oauth2 和授权类型密码进行身份验证。这意味着客户端发送他的用户名并传递到“.../access_token”端点,从那里获取他的令牌。有了这个令牌,他就可以调用其他端点。

在新的 api 版本中,我使用的是 AWS Api Gateway with Authorizer。我想根据用户名和密码字段提供对资源的访问权限

我创建了一个用户池并在那里添加了我的用户。如何仅使用 api 端点进行身份验证? 我不能使用 Oauth“客户端凭据”流程,因为必须公开机器对机器和客户端密码。

在授权代码或隐式授权上,我必须要求用户登录 AWS/自定义 ui 并获得重定向。所以我不能在 Api 中使用这些。

我错过了什么?

【问题讨论】:

【参考方案1】:

我了解您需要在不使用浏览器的情况下对您的用户进行身份验证。一个想法是创建一个登录端点,用户将在其中提供他们的用户名和密码并取回令牌。您应该自己实现此端点。来自这个question:

aws cognito-idp admin-initiate-auth --region your-aws-region --cli-input-json file://auth.json

auth.json 在哪里:


    "UserPoolId": "your-user-pool-id",
    "ClientId": "your-client-id",
    "AuthFlow": "ADMIN_NO_SRP_AUTH",
    "AuthParameters": 
        "USERNAME": "admin@example.com",
        "PASSWORD": "password123"
    

这将为您的用户提供访问权、ID 和刷新令牌(与授权授予类型相同)。他们应该能够使用访问令牌来访问资源并使用刷新令牌针对Token endpoint 来更新访问令牌。

这不是对 API 进行身份验证的常用方法,并且可能会产生一些安全隐患。

【讨论】:

以上是关于使用 Cognito 在 AWS Api Gateway 中验证用户的主要内容,如果未能解决你的问题,请参考以下文章

如何在 API 网关上的 cognito 授权方保护的 lambda 函数中获取 AWS Cognito 用户数据

具有 Cognito 用户池授权方的 AWS SAM API

使用 AWS Cognito 保护 REST API

使用多个用户池的具有 Cognito 授权的 AWS API 网关

使用 Lambda 授权方的 AWS Cognito 和 API 网关

Aws Amplify 在一个 GraphQL Api 中使用多个 Cognito 用户池