注销时使AWS Cognoto令牌无效

时间:2018-07-02 13:45:16

标签: python swift authentication amazon-cognito aws-cognito

我正在使用Python后端构建Swift应用程序,我想使用AWS Cognoto进行身份验证和注册流程。

当前,我正在使用以下代码登录

let user = pool?.getUser(email)
user?.getSession(email, password: password, validationData: nil)
    .continueWith { task in
        // handle error/success

        return nil
    }

上面使用self.pool = AWSCognitoIdentityUserPool.default()调用对池进行了初始化。

在应用启动时,我正在检查用户是否已通过身份验证,并将其获取为access_token:

if AWSSignInManager.sharedInstance().isLoggedIn {
    if let user = pool?.currentUser() {
        user.getSession()
            .continueWith { task in
                token = task.result?.accessToken?.tokenString

                return nil
            }
    }
}

我正在将此令牌传递给后端。在后端,我通过Python Warrant库获取用户数据:

from warrant import Cognito

u = Cognito("id", "key", user_pool_region="us-east-1")
u.access_token = "token"

res = u.get_user(attr_map={"sub": "user_id", "email": "email"})

如果令牌有效,则我正在获取用户的数据,否则,出现异常。但是在客户端注销后,该令牌仍然有效。我正在使用以下注销代码:

AWSSignInManager.sharedInstance().logout { (result: Any?, error: Error?) in
    // handle results
}

我知道,此令牌将在超时后过期,并且不会刷新,因为在下一次登录时,用户将获得另一个accces / refresh令牌对,但是我想在退出时立即使令牌无效,是否是可能?还是我不了解Cognito并错误地使用它?

1 个答案:

答案 0 :(得分:1)

在github和AWS论坛上进行搜索后,我找到了js的aws-sdk的作者chris radek对这个问题的(半)答案。

这里是讨论: https://github.com/aws/aws-sdk-js/issues/1241

基本上,如果您不想阅读所有内容,克里斯说,令牌的标准有效期为一个小时,但

  

通过修改某个参数,您可以将其减少到最小   15分钟。但是,您不能立即使令牌无效   登出。

以下是描述如何减少时间长度的javascript文档: https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/CognitoIdentityCredentials.html#params-property

https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/STS.html#assumeRoleWithWebIdentity-property

有关该主题的AWS文档: https://docs.aws.amazon.com/cognitoidentity/latest/APIReference/API_GetOpenIdTokenForDeveloperIdentity.html

https://forums.aws.amazon.com/thread.jspa?threadID=232652

这是可以在python中调用的匹配函数: https://boto3.readthedocs.io/en/latest/reference/services/cognito-identity.html#CognitoIdentity.Client.get_open_id_token_for_developer_identity

这是可以更改令牌持续时间的地方!