如何仅用User Pool ID、Client ID和密钥通过AWS CLI生成Cognito Access Token
用AWS CLI模拟Cognito Client Credentials模式获取Access Token
问题根源
你之前的CURL请求采用的是OAuth 2.0 Client Credentials授权模式,该模式允许客户端(应用程序)以自身身份直接获取Token,无需用户参与。而你尝试的ADMIN_USER_PASSWORD_AUTH是针对用户密码认证的流程,依赖用户凭证(用户名、密码),与当前需求完全不匹配,因此执行失败。
解决方案
方法1:使用AWS CLI http命令发送请求(推荐)
AWS CLI v2提供了aws http命令,可直接发送HTTP请求,完美替代curl实现需求:
aws http POST "https://MyEndPoint/oauth2/token" \ --headers "Content-Type=application/x-www-form-urlencoded" \ --body "grant_type=client_credentials&client_id=XXX&client_secret=YYY"
若需从环境变量读取参数,可调整为:
export CLIENT_ID="你的Client ID" export CLIENT_SECRET="你的Client Secret" export TOKEN_ENDPOINT="https://你的Cognito OAuth2 Token端点" aws http POST "$TOKEN_ENDPOINT" \ --headers "Content-Type=application/x-www-form-urlencoded" \ --body "grant_type=client_credentials&client_id=${CLIENT_ID}&client_secret=${CLIENT_SECRET}"
方法2:在AWS CLI环境中执行原curl命令
如果仅需在AWS CLI终端环境中运行,直接使用原curl命令即可:
client_id=XXX client_secret=YYY curl -s -X POST -H "Content-Type: application/x-www-form-urlencoded" \ -d "grant_type=client_credentials&client_id=${client_id}&client_secret=${client_secret}" \ "https://MyEndPoint/oauth2/token"
关于admin-initiate-auth的说明
aws cognito-idp admin-initiate-auth支持的所有认证流(如ADMIN_USER_PASSWORD_AUTH、ADMIN_NO_SRP_AUTH等)均为以用户为中心的认证流程,必须依赖用户相关凭证。而Client Credentials模式是以客户端为中心的认证,仅验证客户端自身身份,因此无法通过该命令实现。
内容的提问来源于stack exchange,提问作者grayaii
相关产品推荐
相关产品推荐

