禁用签名的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 }; } };
四、排查要点
- 确保Custom Authorizer已正确关联Lambda函数,且Lambda执行角色拥有
iot:Connect、iot:Publish等必要权限; - 检查请求中的
x-amz-customauthorizer-name头值与控制台配置的Authorizer名称完全一致; - 若仍无日志,确认Lambda函数的日志配置正常(已开启CloudWatch日志),且IoT Core有权限调用该Lambda。
内容的提问来源于stack exchange,提问作者plankton
相关产品推荐
相关产品推荐

