AWS设备自定义身份认证

news2024/12/25 9:23:15

AWS设备自定义身份认证需要通过lambda服务实现,具体来说,首先需要创建一个lambda函数,在函数中实现具体的认证逻辑,然后Iot在调用授权方时,将触发lambda函数,返回认证结果。

1.输入参数说明

授权方在调用lambda函数时,将传递相关的参数信息,具体内容如下所示:

{
    "token" :"aToken",
    "signatureVerified": Boolean, // Indicates whether the device gateway has validated the signature.
    "protocols": ["tls", "http", "mqtt"], // Indicates which protocols to expect for the request.
    "protocolData": {
        "tls" : {
            "serverName": "serverName" // The server name indication (SNI) host_name string.
        },
        "http": {
            "headers": {
                "#{name}": "#{value}"
            },
            "queryString": "?#{name}=#{value}"
        },
        "mqtt": {
            "username": "myUserName",
            "password": "myPassword", // A base64-encoded string.
            "clientId": "myClientId" // Included in the event only when the device sends the value.
        }
    },
    "connectionMetadata": {
        "id": UUID // The connection ID. You can use this for logging.
    },
}

2.创建lambda函数

操作地址:函数 – Lambda (amazonaws.cn)

编写函数逻辑:

如果检测到用户密码为test,则认证通过,并附加允许策略,其他情况,则附加拒绝策略。

console.log('Loading function');

exports.handler = function(event, context, callback) { 
    var uname = event.protocolData.mqtt.username;
    var pwd = event.protocolData.mqtt.password;
    var buff = Buffer.from(pwd, 'base64');
    var passwd = buff.toString('ascii');
    console.log(passwd);
    switch (passwd) { 
        case 'test': 
            callback(null, generateAuthResponse(passwd, 'Allow')); 
        default: 
            callback(null, generateAuthResponse(passwd, 'Deny'));  
    }
};

// Helper function to generate the authorization response.
var generateAuthResponse = function(token, effect) { 
    console.log(effect);
    var authResponse = {}; 
    authResponse.isAuthenticated = true; 
    authResponse.principalId = 'TEST123'; 
    
    var policyDocument = {}; 
    policyDocument.Version = '2012-10-17'; 
    policyDocument.Statement = []; 
    var publishStatement = {}; 
    var connectStatement = {};
    connectStatement.Action = ["iot:Connect"];
    connectStatement.Effect = effect;
    connectStatement.Resource = ["arn:aws:iot:cn-northwest-1:xxxxxx:client/*"];
    publishStatement.Action = ["iot:Publish"]; 
    publishStatement.Effect = effect; 
    publishStatement.Resource = ["arn:aws:iot:cn-northwest-1:xxxxxx:topic/test/battery"]; 
    policyDocument.Statement[0] = connectStatement;
    policyDocument.Statement[1] = publishStatement; 
    authResponse.policyDocuments = [policyDocument]; 
    authResponse.disconnectAfterInSeconds = 3600; 
    authResponse.refreshAfterInSeconds = 300;
    
    return authResponse; 
}

3.创建授权方

通过aws cli命令行工具创建授权方,或者在Iot Core控制台直接创建授权方,

aws iot create-authorizer --authorizer-name TestAuthorizer --authorizer-function-arn arn:aws-cn:lambda:cn-northwest-1:xxxxxx:function:AceAuthorizor --status ACTIVE --signing-disabled

4.授权方添加权限

通过aws cli命令行的方式给授权方添加调用lambda的权限,

aws lambda add-permission --function-name TestAuthorizer --principal iot.amazonaws.com --source-arn arn:aws-cn:iot:cn-northwest-1:xxxxxx:authorizer/TestAuthorizer --statement-id Id-124 --action "lambda:InvokeFunction"

5.测试授权方

通过aws cli测试授权方调用lambda是否成功

aws iot test-invoke-authorizer --authorizer-name TestAuthorizer --mqtt-context "username=xxxxx,password=dGVzdA==,clientId=demo1"
密码正确,则返回授权的策略内容,如下图所示

6.总结

这里要注意aws cli 的配置,我这里最开始用IAM Role方式配置命令行,

刚开始一直报权限问题,后来直接换成用户凭证的方式配置,

 报错“An error occurred (AccessDenied) when calling the AssumeRole operation: User: arn:aws-cn:iam::xxxxxx:user/test is not authorized to perform: sts:AssumeRole on resource: arn:aws-cn:iam::xxxxxx:role/JITP”,后来在目录“C:\Users\用户\.aws”下config文件去掉role_arn,问题才解决。

另外,要注意给授权放添加调用lambda的权限,否则测试一直报错"An error occurred (InvalidResponseException) when calling the TestInvokeAuthorizer operation: AccessDeniedException encountered when invoking lambda; requestId: 53bc3fb4-80d2-4f89-ac98-4d529444ee48"

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/555633.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Qt编程基础 | 使用VS创建空白Qt项目

一、使用VS创建空白Qt项目 使用VS创建空白Qt项目&#xff0c;如下&#xff1a; 步骤一&#xff1a;新建一个空白Qt项目 步骤二&#xff1a;手动添加需要的文件 头文件代码&#xff0c;如下&#xff1a; #include <QtWidgets/QApplication> #include <QWidget>int…

C++11 异常

文章目录 &#x1f356;异常是什么&#x1f32d;概念&#x1f32d;实现方式 &#x1f356;异常的使用和注意事项&#x1f32d;注意事项&#x1f32d;异常的重新抛出&#x1f32d;异常安全 &#x1f356;异常的规范&#x1f356;异常带来的优缺点 &#x1f356;异常是什么 &…

jQurey-基本知识点总结

&#xff08;一&#xff09;jQurey基础知识 1、官网下载&#xff1a;jQuery jQurey是一个js文件&#xff0c;直接存到项目文件中&#xff0c;然后跟平常文件js导入一致&#xff1a; <script src"js/jquery-3.7.0.js"></script> 2、jQurey语法 jQure…

邹检验,结构变化识别及其R语言实现

在描述多维数据的维度关系时&#xff0c;线性模型无疑应用最多。然而某些情况下&#xff0c;我们关心随着时间变化或随着样本分组&#xff0c;线性关系的具体参数是否发生了变化&#xff0c;即是否发生结构变化Structural break。邹检验Chow test提供了最基本的一种结构变化显著…

Solaris Network:去中心化金融(DeFi)的未来

近年来&#xff0c;金融世界经历了一场范式转变&#xff0c;区块链技术在实现无障碍和反审计的去中心化金融服务方面发挥了关键作用。在这样的背景下&#xff0c;Solaris Network应运而生&#xff0c;它创建了一个基于Web 3.0技术的去中心化合成资产生态系统。 什么是Solaris N…

制作网上投票链接制作可以投票的链接制作制作一个投票链接

现在来说&#xff0c;公司、企业、学校更多的想借助短视频推广自己。 通过微信投票小程序&#xff0c;网友们就可以通过手机拍视频上传视频参加活动&#xff0c;而短视频微信投票评选活动既可以给用户发挥的空间激发参与的热情&#xff0c;又可以让商家和企业实现推广的目的&am…

FinClip小程序统计能力重磅上线!数据统计分析更精准

不妨让我们看看在本月的产品与市场发布亮点&#xff0c;看看它们如何帮助您实现目标。 产品方面的相关动向&#x1f447;&#x1f447;&#x1f447; 全新版本的小程序统计能力 ​ 全新版本的⼩程序统计功能已经在近期上线了&#xff0c;我们计划在 2023 年 5 ⽉ 23 ⽇的「价…

git fsmonitor--daemon 占用目录,导致无法修改

当我通过命令 git clone 目录然后导入 IDE 操作时&#xff0c;由于想修改目录名&#xff0c;就退了 IDE&#xff0c;再修改目录名&#xff0c;系统提示我文件夹正在使用&#xff1a; 通过 LockHunter (或者PowerToys) 发现占用该目录的进程&#xff0c;右键打开。 打开后如下…

03. 数据结构之链表

前言 链表是相区别于数组的&#xff0c;另一种典型的线性表数据结构。也是学习后面复杂的数据结构的基础&#xff0c;我们后面很多结构比如树&#xff0c;有向图等都可以用链表很方便的存储管理。 1. 概念 链表&#xff08;linked list&#xff09;是一种在物理上非连续、非…

CryoEM - 冷冻电镜 EMPIAR 数据集的下载过程

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://blog.csdn.net/caroline_wendy/article/details/130812925 EMPIAR: Electron Microscopy Public Image Archive&#xff0c;电镜公开图像存档。 IBM Aspera Connect 是一款高效的文件传…

如何在两个月内考过软考高级

如何在两个月内考过软考高级 前言本人情况备考经历一些备考关键点考试中结果相关资料获取 前言 高级软考的作用这里不用多说&#xff0c;本人在2022年9月初开始备考&#xff0c;在11月初顺利通过高级系统架构师&#xff0c;期间的经历这里与大家分享一下。本人之前并没有考过其…

使用Jmeter连接MySQL测试实战

01、连接MQSQL数据库 1、jmeter要连接mysql数据库 首先得下载mysql jdbc驱动包&#xff0c;尽量保证其版本和你的数据库版本一致&#xff0c;至少不低于数据库版本&#xff0c;否则可能有问题。 官网下载地址为&#xff1a;https://dev.mysql.com/downloads/connector/j/ 下…

数据结构课程设计——哈夫曼编/译码器

数据结构课程设计任务书 学生姓名&#xff1a; 专业班级&#xff1a;软件工程 指导教师&#xff1a; 工作单位&#xff1a; 题 目: 哈夫曼编/译码器 基础要求&#xff1a; &#xff08;1&#xff09;熟悉各种…

HTML- 标签学习之- 表单

input 系列&#xff0c; 类型根据type 区分&#xff0c;所有效果如下&#xff1a; 注意点&#xff1a; 单/多选框&#xff1a; name &#xff1a; 相同name属性的单选值为一组&#xff0c;遗嘱中只能有一个被选中 checked&#xff1a; 默认选中 性别<i…

stm32的IIC驱动0.96OLED

IIC原理介绍&#xff1a; IIC是一个总线的结构但不支持总线协议 OLED介绍&#xff1a; 一、0.96寸OLED屏幕介绍 本文采用的是4针的0.96寸OLED显示进行讲解&#xff0c;采用的是SPI协议&#xff0c;速度会比采用I2C协议的更快&#xff0c;但这两者的显示驱动都一样&#xf…

AIGC功能在线制作思维导图?

ProcessOn思维导图软件是一款功能强大的在线制作思维导图的工具&#xff0c;它提供了丰富的模板和图标&#xff0c;可以帮助用户快速制作出高质量的思维导图。其中&#xff0c;AIGC(人工智能图形识别)功能是 ProcessOn软件中的一大特色&#xff0c;它可以帮助用户更加高效地制…

permiere的字幕自动转录功能

permiere2022.3后就能够离线字幕转录了&#xff0c;这个是个很好的消息&#xff08;但也要温馨的提示大家&#xff0c;这个功能对于非标注发音或者环境嘈杂的环境下的语音识别很不友好&#xff0c;当然&#xff0c;如果你想利用它来识别歌词&#xff0c;那就乘早死了这条心&…

chatgpt赋能Python-pythonslam

Pythonslam&#xff1a;实现SLAM技术的Python库 在机器人领域&#xff0c;SLAM&#xff08;Simultaneous Localization and Mapping&#xff09;技术是非常重要的。SLAM技术使得机器人能够在未知环境中构建地图并同时确定自己的位置。然而&#xff0c;SLAM算法往往需要强大的计…

Godot引擎 4.0 文档 - 第一个 2D 游戏

本文为Google Translate英译中结果&#xff0c;DrGraph在此基础上加了一些校正。英文原版页面&#xff1a; Your first 2D game — Godot Engine (stable) documentation in English 第一个 2D 游戏 在这个循序渐进的教程系列中&#xff0c;您将使用 Godot 创建您的第一个完…

上交清华搞事情!发起最全学科大模型中文知识及推理评测!GPT-4 竟然血洗所有国产模型

夕小瑶科技说 原创 作者 | 小戏&#xff0c;Python 从 OpenAI 的 ChatGPT、Meta 的 LLaMA、Anthropic 的 Claude 到复旦的 Moss、清华的 ChatGlm、MiniMax 的 Glow&#xff0c;国内的国外的大模型百花齐放层出不穷。那么&#xff0c;抛出一个相信大家都会关心的问题&#xff…