我正在构建一个使用Cognito进行登录/注销的无服务器反应应用程序。该应用程序调用API网关,该网关配置为使用Cognito用户池作为自定义授权程序。
我还构建了一个lambda函数来注销用户(cognitoIdentityServiceProvider.globalSignOut
)。
当我登录应用程序,然后调用lambda函数执行管理员注销时,从应用程序调用受保护的API网关功能仍然有效(在Authorization
标头中传递了Cognito ID令牌) ;
cognitoIdentityServiceProvider.globalSignOut
和cognitoIdentityServiceProvider.adminUserGlobalSignOut
等管理员调用是不是实时的,还是API网关配置为仅在一小时后进行验证?
答案 0 :(得分:3)
这是Cognito用户池的默认设置。访问令牌在用户进行身份验证后一小时到期。它不应该在过期后处理。
您可以使用GlobalSignOut和AdminUserGlobalSignOut API撤消所有用户令牌。用户退出后:
应用可以使用GlobalSignOut API允许各个用户从所有设备中签名。通常,应用程序会将此选项作为选项提供,例如从所有设备注销。应用程序必须使用用户的有效,无效,已撤销的访问令牌来调用此方法。此方法不能用于允许用户注销其他用户。
管理员应用可以使用AdminUserGlobalSignOut API允许管理员从所有设备注销用户。管理员应用程序必须使用AWS开发人员凭据调用此方法,并将用户池ID和用户的用户名作为参数传递。 AdminUserGlobalSignOut API可以注销用户池中的任何用户。
答案 1 :(得分:2)
刚刚找到了答案,遗憾的是不是我想听到的:
因为IdToken表示为JSON Web Key Token,所以它已签名 使用秘密或私人/公钥对,这意味着即使你 撤销IdToken,没有办法撤销分布式公共 键。而IdToken的寿命很短,它将在短期内到期 时间。
Is it possible to revoke AWS Cognito IdToken?
答案 2 :(得分:2)
我在Cognito团队。 globalSignOut撤消访问令牌和刷新令牌。 id令牌是一个承载令牌,用于用户池外部的系统。 API网关仍然会接受它,但它的有效期为1小时。