You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Amplify Flutter在OAuth2登录后持久化会话与令牌

在Amplify Flutter中集成自定义OAuth2获取的Cognito令牌

1. 确认Amplify Auth基础配置

首先确保你已完成Amplify Auth的初始化,配置好对应的Cognito用户池和客户端信息。可以通过代码初始化:

import 'package:amplify_auth_cognito/amplify_auth_cognito.dart';
import 'package:amplify_flutter/amplify_flutter.dart';

Future<void> initAmplify() async {
  final authPlugin = AmplifyAuthCognito();
  await Amplify.addPlugin(authPlugin);
  await Amplify.configure(amplifyconfig);
}

2. 解析令牌提取用户信息

从获取到的id_token中解析出用户名(或sub字段),后续创建用户实例需要该信息。可以用jwt_decode包解析JWT:

import 'package:jwt_decode/jwt_decode.dart';

// 从id_token中提取用户名
final Map<String, dynamic> tokenPayload = Jwt.parseJwt(idToken);
final String username = tokenPayload['cognito:username'] ?? tokenPayload['sub'];

注意:需在pubspec.yaml中添加jwt_decode依赖。

3. 手动创建并持久化Cognito会话

使用已获取的令牌创建会话实例,通过Cognito用户对象保存会话,Amplify会自动负责会话的持久化:

import 'package:amplify_auth_cognito/src/sdk/cognito.dart';

// 初始化Cognito用户池
final userPool = CognitoUserPool(
  '<你的用户池ID>',
  '<你的客户端ID>',
);

// 创建Cognito用户实例
final cognitoUser = CognitoUser(username, userPool);

// 构造会话对象
final authSession = CognitoAuthSession(
  idToken: CognitoIdToken(idToken),
  accessToken: CognitoAccessToken(accessToken),
  refreshToken: CognitoRefreshToken(refreshToken),
);

// 保存会话到Amplify
await cognitoUser.setSession(authSession);

4. 验证会话持久化与令牌获取

应用重启后,可通过以下方法获取当前用户和会话令牌:

获取当前登录用户

final currentUser = await Amplify.Auth.getCurrentUser();
print('当前用户:${currentUser.username}');

获取会话令牌

final session = await Amplify.Auth.fetchAuthSession();
if (session.isSignedIn) {
  final cognitoSession = session as CognitoAuthSession;
  print('ID Token:${cognitoSession.idToken?.raw}');
  print('Access Token:${cognitoSession.accessToken?.raw}');
}

5. 令牌刷新处理

Amplify会自动处理access_token过期后的刷新逻辑,若需手动触发刷新:

final refreshedSession = await Amplify.Auth.fetchAuthSession(
  options: const FetchAuthSessionOptions(forceRefresh: true),
);

注意事项

  • 确保Cognito客户端配置允许authorization_code授权类型,且调用token API时的redirect_uri与OAuth2授权流程中的一致。
  • 若解析id_token失败,检查令牌是否为有效JWT格式,确保未被篡改或过期。

内容的提问来源于stack exchange,提问作者Darshan Prajapati

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 17:36:18