AWS Cognito直接请求URL配置困惑:用户池域名请求超时
AWS Cognito直接请求的正确URL格式说明
首先明确:你用的https://<my_userpool_name>.auth.us-east-1.amazoncognito.com这个基础域名是对的,但直接访问根域名会超时——因为Cognito的用户池域名根路径没有绑定服务,必须追加对应操作的端点路径。以下是不同场景下的正确URL及注意事项:
1. 用户名密码直接获取令牌(OAuth2密码模式)
适合前端或后端直接用用户名密码认证,不需要跳转Hosted UI。正确URL是:
https://<userpool-domain>.auth.<region>.amazoncognito.com/oauth2/token
这是POST请求,必须携带以下参数(表单格式或JSON):
grant_type=passwordclient_id=<你的客户端ID>client_secret=<你的客户端密钥>(因为你的客户端配置了密钥,必须传这个,否则会触发你遇到的密钥未接收错误)username=<用户账号>password=<用户密码>
注意:需要在Cognito客户端设置的"Allowed OAuth Flows"里开启ALLOW_PASSWORD_AUTH。
2. 后端Admin端用户认证(无交互场景)
如果是后端服务调用,推荐用Cognito Admin API,URL是:
https://cognito-idp.<region>.amazonaws.com/
这是POST请求,需要用AWS签名V4认证(可以用AWS SDK自动处理签名),请求体示例:
{ "AuthFlow": "ADMIN_USER_PASSWORD_AUTH", "ClientId": "<你的客户端ID>", "UserPoolId": "<你的用户池ID>", "AuthParameters": { "USERNAME": "<用户账号>", "PASSWORD": "<用户密码>", "SECRET_HASH": "<计算后的Secret Hash>" } }
这里的SECRET_HASH是用客户端密钥、用户名、客户端ID计算的HMAC-SHA256值(公式:HMAC-SHA256(客户端密钥, 用户名 + 客户端ID)),客户端配置密钥时必须传这个参数,否则会触发密钥错误。
关于Hosted UI路径的说明
/oauth2/authorize确实是跳转AWS托管登录页的端点,适合授权码流程(需要用户手动输入账号密码),如果你不需要跳转,就不用这个路径。
最后提醒:你遇到的"Client client_secret,Admin API要传SECRET_HASH,只要补上就能解决这个问题。
内容的提问来源于stack exchange,提问作者Jesse Finnegan
相关产品推荐
相关产品推荐

