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

Angular中如何利用AWS Amplify Cognito令牌访问AWS IoT Core PubSub?

Angular中利用AWS Amplify Cognito令牌访问AWS IoT Core PubSub的实现步骤

核心逻辑说明

Cognito返回的IdToken会被Amplify自动用来通过AWS STS服务换取临时AWS凭证,无需手动处理令牌到凭证的转换——你只需要确保权限配置正确,以及Amplify PubSub插件与Auth模块联动正常。

步骤1:配置Cognito身份池的IoT权限

给Cognito身份池的Authenticated角色添加以下IAM策略,允许用户访问IoT Core的PubSub功能:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect",
                "iot:Subscribe",
                "iot:Receive"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:你的AWS账号ID:client/${cognito-identity.amazonaws.com:sub}",
                "arn:aws:iot:us-east-1:你的AWS账号ID:topic/你的主题路径/*"
            ]
        }
    ]
}

注意替换占位符为你的实际AWS账号ID、区域和主题路径

步骤2:修正并完善登录后的PubSub初始化代码

你的现有代码缺少PubSub的初始化和订阅逻辑,修改后如下:

async signIn() {
    try {
        const user = await Auth.signIn('xxxxx', 'xxxxx');
        
        if (user.challengeName === 'NEW_PASSWORD_REQUIRED') {
            const updatedUser = await Auth.completeNewPassword(
                user,
                'xxx',
                { email: 'xxxx@example.com' }
            );
            console.log('用户完成密码重置并登录:', updatedUser);
            this.initPubSub(); // 完成密码后初始化PubSub
        } else {
            console.log('用户登录成功');
            this.initPubSub(); // 直接初始化PubSub
        }
    } catch (e) {
        console.error('登录失败:', e);
    }
}

private initPubSub() {
    console.log('连接AWS IoT...');
    // 注册IoT插件
    Amplify.addPluggable(new AWSIoTProvider({
        aws_pubsub_region: 'us-east-1', // 注意填写完整区域标识符
        aws_pubsub_endpoint: 'wss://xxxxx-ats.iot.us-east-1.amazonaws.com/mqtt',
    }));
    
    // 订阅目标IoT主题并监听消息
    PubSub.subscribe('你的目标IoT主题名').subscribe({
        next: (data) => console.log('收到IoT消息:', data),
        error: (error) => console.error('PubSub错误:', error),
        complete: () => console.log('订阅流程结束')
    });
}

关键细节说明

  • Amplify Auth自动维护临时凭证:登录成功后,Amplify会自动用Cognito的IdToken向STS请求临时凭证并缓存,PubSub插件会直接使用缓存的凭证访问IoT Core,无需手动处理令牌转换。
  • 区域配置需准确:aws_pubsub_region必须是完整的区域名(如us-east-1,不能只写us-east)。
  • 主题权限要匹配:IAM策略中的Resource必须包含你要订阅的IoT主题路径,否则会触发权限拒绝错误。

内容的提问来源于stack exchange,提问作者mukund srinivas

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 03:31:22