python - 注销时使 AWS Cognito token 无效

标签 python swift authentication amazon-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
            }
    }
}

我正在将此 token 传递给后端。在后端,我通过 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"})

如果 token 有效,我将获取用户数据,否则会引发异常。但是在客户端注销后,这个 token 仍然存在。我正在使用以下注销代码:

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

我知道,这个 token 将在超时后过期,并且不会被刷新,因为下次登录用户将获得另一个 accces/refresh token 对,但我想在注销时立即使 token 无效,是吗可能的?或者我不了解 Cognito 并错误地使用它?

最佳答案

在搜索 github 和 AWS 论坛后,我找到了 chris radek 对这个问题的(半)回答,他是 aws-sdk for js 的贡献者。

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

如果您不想全部阅读,基本上,chris 说 token 的标准有效期为一个小时,但是

by modifying a certain parameter you can cut that down to a minimum of 15 minutes. You cannot, however, invalidate a token immediately on signout.

以下是描述如何缩短持续时间的 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

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

关于python - 注销时使 AWS Cognito token 无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51137683/

相关文章:

快速桥接 2D 数组以键入 UnsafePointer<UnsafeMutablePointer<Double>?>?

swift - 使用 Swift 的 Chartboost - Interstitial : prefetch if NOT complete. 等等......但没有广告?

security - CouchDB 中的基本 HTTP 身份验证对于跨 EC2 区域的复制是否足够安全?

python - Flask 请求永远挂起

python - 如何通过 gitpython 检查 Git Repo 是否有未提交的更改

python - 运行 flask 服务器

ios - 如何将 png 图像复制到剪贴板以便将其粘贴到其他应用程序中?

Python urllib2 基本认证问题

javascript - 我应该如何将用户的登录状态传递到我的 Ember.js 应用程序?

python - 表示 "doubled"枚举值的最佳方式