我正在使用 Amplify Auth 实现 Flutter 应用程序,以通过 Amazon Cognito 用户池 向用户授权。具体来说,我正在使用官方的 Authenticator 组件,一切看起来都很好,因为我可以注册/登录,并且用户按预期在 Cognito 用户池中创建。
但是,如果我想使用 ID 令牌通过其 Authorizer 与 API Gateway 进行通信,则不起作用。我多次使用新的 ID 令牌测试 Authorizer,但总是导致 403 Unauthorized。
我一直以为我在 API Gateway Authorizer 或/和 Cognito 用户池上进行了任何错误配置(尽管用户池是由 amplify-cli 自动创建的),但我在另一个 iOS 应用程序中尝试了相同的 Cognito 用户池(复制
amplifyconfiguration.dart
到 amplifyconfiguration.json
)使用 iOS 的 Amplify Authenticator 框架,它成功了!在同一个 API Gateway Authorizer 上进行测试,对于我在 iOS 应用程序中获得的 ID 令牌,返回 200。
鉴于 iOS 框架和 Flutter 组件之间的行为似乎存在差距,但有人有任何想法吗?
仅供参考:这就是我在每个平台中检索 ID 令牌的方法。
final cognitoPlugin = Amplify.Auth.getPlugin(AmplifyAuthCognito.pluginKey);
final result = await cognitoPlugin.fetchAuthSession();
final idToken = result.userPoolTokensResult.value.idToken.raw;
let session = try await Amplify.Auth.fetchAuthSession()
guard let session = session as? AWSAuthCognitoSession else {
fatalError()
}
switch session.userPoolTokensResult {
case .success(let success):
idToken = success.idToken
您的令牌结果应包含 3 个部分:
access_token
、id_token
和 refresh_token
。您应该将 access_token
标头中的 Authorization
的内容传递给 API 网关进行身份验证。