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

如何在AWS Amplify(Flutter/JS)中实现自定义身份授权并迁移iOS方案

问题描述

在iOS的AWSCore库中,可通过以下方式将自定义第三方认证系统授权至AWS身份池:

let myIdProvider = MyCustomIdProvider()
let credentialsProvider = AWSCognitoCredentialsProvider(regionType: AWSRegionType.USWest2, identityProvider: myIdProvider)
let configuration = AWSServiceConfiguration(region: AWSRegionType.USWest2, credentialsProvider:credentialsProvider)!
// 后续可用于S3等服务访问...

// 自定义身份提供者类...
class MyCustomIdProvider : AWSCognitoCredentialsProviderHelper {
   override func token() -> AWSTask<NSString> {
       // 在此处完成验证逻辑
   }
}

现需将该实现迁移至跨平台方案(优先选择Dart/Flutter,也可接受JS方案),如何在Amplify中实现此需求?


Flutter/Dart 实现方式

Amplify Flutter支持通过自定义身份提供者对接AWS身份池,核心是实现自定义凭证获取逻辑,步骤如下:

  1. 配置Amplify Auth
    在amplifyconfiguration.dart中配置身份池,需与AWS控制台中自定义提供者名称保持一致:
const amplifyconfig = '''{
  "auth": {
    "plugins": {
      "awsCognitoAuthPlugin": {
        "IdentityManager": {
          "Default": {}
        },
        "CredentialsProvider": {
          "CognitoIdentity": {
            "Default": {
              "PoolId": "YOUR_IDENTITY_POOL_ID",
              "Region": "us-west-2"
            }
          }
        },
        "CognitoIdentityProvider": {
          "Default": {
            "Region": "us-west-2",
            "UserPoolId": "", // 自定义提供者无需用户池,留空
            "ClientId": ""
          }
        },
        "Auth": {
          "Default": {
            "authenticationFlowType": "CUSTOM_AUTH"
          }
        }
      }
    }
  }
}''';
  1. 实现自定义身份获取逻辑
    先调用第三方认证系统获取token,再传递给AWS身份池获取临时凭证:
import 'package:amplify_auth_cognito/amplify_auth_cognito.dart';
import 'package:amplify_flutter/amplify_flutter.dart';

// 获取第三方认证系统的token
Future<String> getCustomAuthToken() async {
  // 替换为你的第三方认证接口调用逻辑
  // final response = await http.post(Uri.parse('YOUR_AUTH_ENDPOINT'), body: {...});
  // return response.data['token'];
  return "YOUR_CUSTOM_AUTH_TOKEN";
}

// 初始化Amplify并获取AWS凭证
Future<void> setupCustomAuth() async {
  await Amplify.addPlugin(AmplifyAuthCognito());
  await Amplify.configure(amplifyconfig);

  final customToken = await getCustomAuthToken();
  
  // 使用自定义token获取AWS身份池凭证
  final credentialsProvider = CognitoCredentialsProvider(
    identityPoolId: 'YOUR_IDENTITY_POOL_ID',
    region: 'us-west-2',
    customProvider: (_) async => customToken,
  );

  // 后续使用Amplify的S3等服务时,会自动使用该凭证
}
  1. AWS控制台配置
    在AWS身份池控制台中启用「自定义身份提供者」,设置与代码中匹配的提供者名称,并配置token验证规则(如签名校验或后端接口验证)。

JavaScript(Web/Node.js)实现方式

Amplify JS同样支持自定义身份提供者对接,步骤如下:

  1. 配置Amplify
    在amplifyconfiguration.json中配置身份池和自定义提供者:
{
  "auth": {
    "identityPoolId": "YOUR_IDENTITY_POOL_ID",
    "region": "us-west-2",
    "authenticationFlowType": "CUSTOM_AUTH",
    "customProvider": "YOUR_CUSTOM_PROVIDER_NAME"
  }
}
  1. 实现自定义认证逻辑
    获取第三方token后,通过federatedSignIn对接AWS身份池:
import { Amplify, Auth } from 'aws-amplify';
import amplifyconfig from './amplifyconfiguration.json';

Amplify.configure(amplifyconfig);

// 获取第三方认证token
async function getCustomAuthToken() {
  // 替换为你的第三方认证接口调用逻辑
  // const response = await fetch('YOUR_AUTH_ENDPOINT', { method: 'POST', body: ... });
  // const data = await response.json();
  // return data.token;
  return "YOUR_CUSTOM_AUTH_TOKEN";
}

// 完成自定义认证并获取AWS凭证
async function signInWithCustomProvider() {
  const customToken = await getCustomAuthToken();
  await Auth.federatedSignIn({
    provider: 'YOUR_CUSTOM_PROVIDER_NAME',
    token: customToken
  });

  // 获取AWS临时凭证
  const credentials = await Auth.currentCredentials();
  // 后续可用于S3等服务访问
}
  1. AWS控制台配置
    与Flutter方案一致,在身份池控制台启用自定义身份提供者,设置匹配的名称和验证规则。

内容的提问来源于stack exchange,提问作者Quinn Frederick

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 19:48:22