gpt4 book ai didi

flutter - 如何使用 session 的刷新 token 在 amazon-cognito-identity-dart-2 包 flutter 中获取新的 jwt 访问 token ?

转载 作者:行者123 更新时间:2023-12-05 02:56:18 25 4
gpt4 key购买 nike

我目前正在使用 Dart SDK amazon-cognito-identity-dart-2用于 flutter 中的身份验证和数据上传。

当为 session 生成刷新 token 时,如何使用此刷新 token 在到期前获取新的 jwt 访问 token ?

最佳答案

如果您的目标只是获取 jwt 访问 token ,则可以在启动 session 后完成,而无需使用刷新 token 。

首先您需要对用户进行身份验证:

final userPool = CognitoUserPool(awsUserPoolId, awsClientId);
final cognitoUser = CognitoUser(email, userPool);
final authDetails = AuthenticationDetails(
username: email, //user email
password: password, //user password
);

CognitoUserSession cognitoUserSession = await cognitoUser.authenticateUser(authDetails);

现在您有一个活跃的 Cognito session 。此 session 包含所有相关 token 。您可以通过以下方式获取 jwt 访问 token :

String jwtToken = cognitoUserSession.getAccessToken().getJwtToken();

您可能注意到这不涉及刷新 token 的使用,并且您可能想知道如何处理 token 可能过期的情况。幸运的是,这很简单。我们可以通过检查来确定 token 是否过期

cognitoUserSession.isValid()

如果 token 过期(通过检查耗时和 token 过期时间),则返回 false。即使这返回 false,我们也不需要明确地使用刷新 token 。我们只需要像这样更新我们的 session :

CognitoUserSession newSession = cognitoUser.getSession();

这里,cognitoUser 是我们在开始时验证的同一个用户变量。当调用 getSession() 方法时,如果当前 token 已过期,我们的用户对象将返回一个带有新 token 的新 session (这是在 cognito 用户类中使用刷新 token 完成的)。

因此,您只需要在获取访问 token 之前检查 session 是否有效,如果 session 已过期,只需调用 getSession() 方法来更新它。完整的实现看起来像这样:

class UserService {

final _userPool = new CognitoUserPool(
awsUserPoolId,
awsClientId,
);
CognitoUser _user;
CognitoUserSession _session;

Future<bool> login(String email, String password) async {
_user = CognitoUser(email, userPool);
final authDetails = AuthenticationDetails(
username: email,
password: password,
);
try {
_session = await cognitoUser.authenticateUser(authDetails);
} on CognitoClientException catch (e) {
return false;
}
return true;
}

Future<String> getAccessToken() async {
if (!_session.isValid()) {
_session = await _user.getSession();
}
return _session.getAccessToken().getJwtToken();
}
}

免责声明:为简单起见,我从登录方法返回了一个 bool 值。您可能希望在处理异常方面做得更好

关于flutter - 如何使用 session 的刷新 token 在 amazon-cognito-identity-dart-2 包 flutter 中获取新的 jwt 访问 token ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60630992/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com