AWS Cognito中授权码兑换访问令牌仅能执行一次吗?
AWS Cognito授权码兑换访问令牌是否仅能执行一次?
问题描述
通过AWS Cognito托管UI完成认证后,会被重定向至包含授权码的回调URL,示例如下:
https://app.example.com/?code=16036818-2t63-4a31-98b0-e3c21aa9a24d
使用Curl工具调用令牌接口可成功获取Access Token,请求示例:
curl --location --request POST 'https://my-app.auth.eu-west-1.amazoncognito.com/oauth2/token' \ --data-urlencode 'grant_type=authorization_code' \ --data-urlencode 'client_id=47akl6j7j4grj2js419' \ --data-urlencode 'code=16036818-2t63-4a31-98b0-e3c21aa9a24d' \ --data-urlencode 'redirect_uri=https://app.example'
但重复执行该请求时,会返回如下错误:
{ "error": "invalid_grant" }
疑问:该授权码兑换访问令牌的操作是否仅能执行一次?
回答
是的,AWS Cognito的授权码(authorization code)确实只能被使用一次。
这是OAuth 2.0授权码流程的标准安全设计:授权码作为一次性临时凭证,一旦被用来兑换访问令牌(Access Token)和刷新令牌(Refresh Token),就会被Cognito立刻标记为失效,再次使用必然返回invalid_grant错误。
这种机制的核心目的是防范授权码泄露后的滥用风险——即便攻击者窃取到已使用过的授权码,也无法通过它获取有效令牌,从而大幅提升认证流程的安全性。
如果后续需要更新令牌,应该使用首次兑换得到的Refresh Token发起请求,将grant_type参数设为refresh_token即可,无需也不能重复使用授权码。
内容的提问来源于stack exchange,提问作者Andre
相关产品推荐
相关产品推荐

