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

禁用签名的AWS IoT Core自定义授权器HTTPS发布及账号密码传递问题

禁用签名的HTTPS发布支持及用户名密码传递方案

禁用签名的HTTPS发布确实支持通过Custom Authorizer传递用户名密码,但不能直接使用标准的Authorization: Basic ...头——AWS IoT Core的Custom Authorizer不会自动解析这个头,这也是你之前请求返回Forbidden且无日志的原因(IoT Core没把请求转发到Lambda授权器)。以下是正确的实现方式:

一、确认Custom Authorizer基础配置

在AWS IoT控制台配置Custom Authorizer时,必须:

  • 开启Signing Disabled(禁用签名)选项;
  • 若不需要额外的IoT策略验证,可开启Disable IoT Policy Validation(直接通过Lambda返回的策略控制权限)。

二、传递用户名密码的两种有效方式

方式1:自定义HTTP头传递

通过自定义HTTP头(比如x-username、x-password)传递凭证,Lambda授权器从event.headers中读取验证。

示例curl命令:

curl -v -X POST 'https://[iot-core-endpoint]:443/topics/test/topic?qos=0' \
 -H "x-amz-customauthorizer-name: test-authorizer" \
 -H "Host: [iot-core-endpoint]" \
 -H "x-username: your-valid-username" \
 -H "x-password: your-valid-password" \
 -H "Content-Type: application/json" \
 -d '{"key1":"value1", "key2":"value2"}'

方式2:查询参数传递

将用户名密码放在请求的查询参数中,Lambda授权器从event.queryStringParameters读取验证。

示例curl命令:

curl -v -X POST 'https://[iot-core-endpoint]:443/topics/test/topic?qos=0&username=your-valid-username&password=your-valid-password' \
 -H "x-amz-customauthorizer-name: test-authorizer" \
 -H "Host: [iot-core-endpoint]" \
 -H "Content-Type: application/json" \
 -d '{"key1":"value1", "key2":"value2"}'

三、Lambda授权器核心逻辑示例

以Node.js为例,从自定义头中读取凭证并验证,返回授权策略:

exports.handler = async (event) => {
    // 从自定义头获取用户名密码
    const username = event.headers['x-username'];
    const password = event.headers['x-password'];

    // 替换为你的实际验证逻辑(比如查询数据库、调用认证服务)
    const isAuthValid = username === 'admin' && password === 'secure-pass-123';

    if (isAuthValid) {
        return {
            isAuthenticated: true,
            principalId: username,
            policyDocuments: [
                {
                    Version: '2012-10-17',
                    Statement: [
                        {
                            Effect: 'Allow',
                            Action: ['iot:Publish'],
                            Resource: ['arn:aws:iot:your-region:your-account-id:topic/test/topic']
                        }
                    ]
                }
            ]
        };
    } else {
        return {
            isAuthenticated: false
        };
    }
};

四、排查要点

  1. 确保Custom Authorizer已正确关联Lambda函数,且Lambda执行角色拥有iot:Connect、iot:Publish等必要权限;
  2. 检查请求中的x-amz-customauthorizer-name头值与控制台配置的Authorizer名称完全一致;
  3. 若仍无日志,确认Lambda函数的日志配置正常(已开启CloudWatch日志),且IoT Core有权限调用该Lambda。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 08:27:52