使用 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
使用多个用户池的具有 Cognito 授权的 AWS API 网关