如何通过Cognito实现AWS API Gateway纯API端点用户名密码认证
适配纯API调用场景的身份认证实现方案
你可以通过以下两种完全基于API调用的方案实现和原有密码授权模式一致的认证逻辑,无需页面跳转:
方案1:直接使用Cognito原生密码认证流
该方案对标原有OAuth2密码授权模式,客户端侧改动量极小:
- 首先进入Cognito用户池的对应应用客户端配置页,开启
ALLOW_USER_PASSWORD_AUTH认证流,无需生成客户端密钥,避免密钥泄露风险。 - 客户端直接调用Cognito的
InitiateAuth服务端API,指定AuthFlow参数为USER_PASSWORD_AUTH,同时传入用户名、密码、应用客户端ID,调用成功后即可直接获取IdToken、AccessToken、RefreshToken三类令牌,流程和你原有获取access_token的逻辑完全一致。 - API Gateway侧直接配置Cognito授权器,校验请求头中携带的AccessToken/IdToken即可,你可以基于Cognito用户池的用户组、自定义属性实现资源访问权限控制。
方案2:封装自定义/access_token端点兼容原有逻辑
如果需要完全对齐原有API的请求路径、参数格式,避免客户端侧任何改动,可以选择自行封装认证接口:
- 在AWS API Gateway中新增一个公开访问的
/access_token端点,后端集成Lambda函数。 - Lambda函数接收客户端传入的用户名、密码参数,调用Cognito的
AdminInitiateAuth接口完成认证,将Cognito返回的令牌按照原有接口的格式封装后返回给客户端。 - 为Lambda对应的IAM角色添加
cognito-idp:AdminInitiateAuth权限,且限制仅可操作你当前使用的Cognito用户池即可。
通用注意事项
- 所有涉及用户名、密码、令牌传输的接口必须开启HTTPS,保证传输安全。
- 可根据业务需要在Cognito中配置密码错误次数锁定、令牌有效期等安全策略,无需额外开发即可覆盖原有认证体系的安全能力。
内容的提问来源于stack exchange,提问作者Crerem
相关产品推荐
相关产品推荐

