Digital Bridge是Unitize Hackathon颁发的Chainlink法官评选奖,它使用Chainlink外部适配器将2FA API连接到Chainlink oracle,以便对2FA PIN的有效性进行分散式验证。 他们的2FA智能合约是如何将Chainlink的可定制和安全的Oracle基础架构用于将脱链API连接到智能合约,启用新的,高度可配置的链上安全性工作流的一个很好的例子。 在本文中,Digital Bridge团队,Javier Salomon,Alejandro Pronotti和Mateo Hepp解释了如何将Chainlink 2FA适配器集成到以太坊dApp中,以便可以在从保护DeFi资金到KYC验证的许多用例中使用它。 。 亚历杭德罗·普罗诺蒂(Alejandro Pronotti),哈维尔·所罗门(Javier Salomon)和马特奥·赫普(Mateo Hepp) Chainlink的外部适配器功能使将智能合约轻松连接到任何API变得容易,从而使智能合约的各种用例能够触发脱链事件,并将防篡改数字协议引入外部系统。 对于Digital Bridge技术集成,我们开发了Chainlink外部适配器来读取链外的高可用性2FA API身份验证服务,并且我们还配置了自定义的Digital Bridge Chainlink oracle节点,该节点传递确认2FA所需的密码。 oracle可以使用Amazon AWS Lambda,Google Cloud Platform函数或Docker实施外部适配器。 为了对持有2FA密码的用户进行身份验证,用户需要在链上提交包含其客户ID和由其身份验证器应用程序生成的临时一次性密码的哈希值的交易。 一个指定的扫描链上链的Chainlink节点然后进行该交易并查询脱链服务器(通过API)以验证2FA代码的真实性。 一旦Chainlink节点收到响应,它将在链上传递此布尔值,如果授权为TRUE,则触发智能合约将授权授予原始用户。 此实现通过使用PIN的哈希值和外部适配器将PIN与链下身份验证器进行比较,避免了中间人攻击。 在这篇技术文章中,我们将介绍: 2FA API的用法 安装和运行2FA外部适配器 如何通过网桥和作业规范将此外部适配器连接到Chainlink节点 如何编写智能合约以通过Chainlink节点使用2FA外部适配器来验证2FA PIN的有效性2FA API用法 要调用2FA API,您可以使用自己的自定义API或第三方API,并且只需对适配器进行一些最小的更改即可。 为了方便测试和开发,我们为示例用户提供了一个演示API,可通过演示API密钥进行访问。 2FA演示API允许使用以下“ customerid”变量值和API_KEY验证2FA PIN的有效性。 演示样本用户 customerid =’alice’,secretcode =“ VPPRAX5ZS3EAT3ID” customerid =’bob’,secretcode =“ O73Y5FPODOZXHJ4G” customerid =’joe’,secretcode =“ 6VG5WWIDWHLR3SYE”演示授权API密钥 yyTHPaT2n27n3bva9mhX sDVRwdc4NXaKP4PZ7CuW viaMmedQyaWb2DQeF7dL输入参数 JSON输入的结构如下。 {“ id”:“ f82dfad608254bc7a36364f317e47a4d”,“ data”:{“ customerid”:“ alice”,“ hashedpin”:“ 32532605273527”}}} 在此示例中,jobSpec是f82dfad608254bc7a36364f317e47a4d。 操作可以是以下任何一种:customerid或hashedpin。 计算散列图钉执行以下命令: 在Python中(默认为2020年7月28日12:59:40)>>>导入日期时间>>>导入sha3 >>> PIN =“ 534204” >>> int(sha3.keccak_256(PIN.encode(’utf-8 ‘))。hexdigest()[:12],16)32532605273527 hashedpin是:32532605273527 这是另一种使用安装了web3模块的JavaScript计算hashedpin的方法。 安装了web3模块的JavaScript user @ ubuntu-machine:?/ nodejs-web3-project $节点欢迎使用Node.js v12.20.0。 键入“ .help”以获取更多信息。 > const Web3 = require(’web3’); > var PIN =’534204′; > parseInt(Web3.utils.sha3(PIN).slice(2,14),16); 32532605273527 下一步是进行REST API调用。 curl -H“授权:Apikey yyTHPaT2n27n3bva9mhX”“ https://us-central1-digitalbridge.cloudfunctions.net/TwoFA-chekpin-api?customerid=alice&hashedpin=42646170711749” 输出范例 {“结果”:true} 您将收到true或false值,指示PIN是否有效。 安装和运行2FA外部适配器 我们创建了一个外部适配器,将Chainlink节点连接到2FA API,以利用Chainlink oracle对2FA PIN有效性进行链上,对等验证。 现在,此外部适配器已在Chainlink市场上列出,可供其他开发人员使用,修改或扩展。 从GitHub下载用于外部适配器的代码后,即可按以下方式安装和运行它。 在本地安装要求 纱安装依赖项: 纱 跑步 节点-e’require(“ ./ index.js”)。server()’ 安装后,可以将外部适配器添加到Chainlink节点,然后创建使用它的作业规范。 通过网桥和作业规范将外部适配器连接到Chainlink节点 首先,使用以下数据在Chainlink节点中创建Bridge和Job: 网桥(在这种情况下,我们正在使用GCP cloud功能) 名称:2fa-maticmumbai网址:https://us-central1-digitalbridge.cloudfunctions.net/twofa-adapter 职位规格 {“启动器”: [ 在作业规范中,启动器是触发或启动作业的东西。 在这种情况下,启动器设置为RunLog,这意味着当Oracle合同在0xa244b30a48559d16078bb151f342d3f12219142f发出OracleRequest事件时,节点将触发此作业运行。 这是我们之前部署的Oracle合同,对于您要请求的任何Chainlink节点都是唯一的。 然后,适配器将按定义的顺序处理我们的请求: 创建网桥类型请求。 该桥将从客户端智能合约的customerid和hashedpin参数给出,然后执行对外部API的请求。 响应将通过管道传递到下一个任务。 将结果解析为JSON并获取在客户端合同给定的路径中定义的值作为请求参数。 将字符串类型结果值转换为以太坊布尔类型值。 将结果作为交易触发。如果要测试适配器,则可以使用curl命令,但是您需要用部署oracle智能合约并创建作业时获得的值替换jobid和Oracle地址。 智能合约的参数 Jobid:f82dfad608254bc7a36364f317e47a4d Oracle地址:0xA244B30a48559d16078BB151f342d3f12219142F 测试适配器的命令 curl -X POST -H’内容类型:application / json’-d'{“ id”:“ f82dfad608254bc7a36364f317e47a4d”,“ data”:{“ customerid”:“ alice”,“ hashedpin”:“ 74856005982787”}}“ “ https://us-central1-digitalbridge.cloudfunctions.net/twofa-adapter” 回复 {“ jobRunID”:“ f82dfad608254bc7a36364f317e47a4d”,“ data”:{“ result”:true},“ result”:true,“ statusCode”:200}通过智能合约验证2FA PIN的有效性 现在,我们正在运行外部适配器,已将其添加到Chainlink节点作业规范中,并添加了桥。 最后,我们将需要一个使用此数据的智能合约客户端。 第一步是创建一个新的API消费者合同,设置所有必需的参数。 您应在合同中创建两个功能:requestGAPINCheck和履行GAPINCheck,如以下示例所示。 调用requestGAPINCheck函数与2FA API服务进行交互。 requestGAPINCheck函数接受客户ID和散列的PIN作为参数。 这应该是前面在2FA外部适配器部分中提到的第一个作业规范的ID。 我们将LINK付款金额设置为0.1 LINK。 这是我们的Solidity示例,通过我们的Chainlink oracle发出HTTP POST请求。 function requestGAPINCheck(string memory _customerId,int256 _hashedpin)public {Chainlink.Request memory req = buildChainlinkRequest(JOBID,address(this),this.fulfillGAPINCheck.selector); req.add(“ customerid”,_customerId); req.addInt(“ hashedpin”,_hashedpin); req.add(“ path”,“ result”); sendChainlinkRequestTo(ORACLE_ADDRESS,req,0.1 * 1以太); } JOBID是我们的buildChainlinkRequest的第一个参数。 第二个参数是返回数据的合同的地址,也称为回调地址。 最后一个参数是将处理收集到的数据的函数,也称为“回调函数签名”。 我们希望将数据返回到该合同,因此我们输入了address(this),并且将完成将要处理数据的函数。 如果PIN有效,则合同将返回成功消息和包含布尔值的JSON对象: {“结果”:true} 如Chainlink.Request字段中所指定,此响应数据将返回到requestGAPINCheck函数,我们可以在其中手动添加所需的操作: 函数complementGAPINCheck(bytes32 _requestId,布尔值_allowed)公共记录链式链接实现(_requestId){currentPermission = _allowed; 发出RequestGAPINCheckFulfilled(_requestId,currentPermission); 如果(currentPermission){// *********************************************** ************************** //采取特殊行动// **************** ****************************************************** **** // currentPermission = false; }} 布尔类型_allowed参数是Chainlink节点将输入从发出HTTP POST请求中收集的2FA授权的位置。 让我们看一下每个适配器的作用: 桥 Chainlink节点将发出HTTP POST请求。 eq.add(“ customerid”,_customerId); jsonparse 节点发出HTTP POST请求后,它将通过JSON并仅找到所需的值。 存储HTTP POST请求的整个返回将非常昂贵,因为您在以太坊区块链上存储的次数越多,您必须支付的汽油费就越多。 因此,我们希望尽可能少地返回。 req.add(“ path”,“ result”); 这会将HTTP POST请求的返回从返回值的JSON({“ result”:true})压缩为仅true值。 乙脑 您会在上面的代码中注意到,我们没有将任何参数传递给此适配器; 那是因为我们不需要。 该适配器仅将我们对true的答案转换为Solidity可读格式。 伦理 这个也不需要任何参数。 这是实际上使用sendChainlinkRequestTo方法将数据发布到链上的适配器。 上面的合同的完整工作版本可在GitHub上获得。 目前,此实现已连接到演示2FA API服务器,以进行开发和测试。 要将其修改为生产环境并连接到实际的2FA服务,我们需要将作业规范更新为在2FA外部适配器上运行的,指向活动的2FA生产服务器的规范。 如果您需要有关外部适配器的更多技术详细信息,可以在market.link上进行查看。 概括 通过使用Chainlink网络及其通用的外部适配器功能,我们演示了如何将智能合约与2FA服务集成在一起。 它的集成为用户提供了智能合约额外的安全层,而仅使用链上的哈希数据。 该演示为智能合约和服务集成开辟了许多有趣的潜在用例,管理敏感数据的公司可能需要2FA作为额外的安全层。 学到更多 如果您是开发人员,并且想将智能合约连接到底层区块链之外的现有数据和基础架构,请访问此处或访问Chainlink开发人员文档。 网站| 推特| 不和谐| Reddit | YouTube | 电报| 大事记| GitHub | 价格提要| DeFi >>在链节上查看 加入我们的电报 在推特上关注我们 在Facebook上关注我们 帖子 [Chainlink] 如何使用Chainlink将两因素身份验证(2FA)API连接到智能合约,这是AZCoin新闻上的第一篇文章。 —- 原文链接:https://azcoinnews.com/chainlink-how-to-connect-a-two-factor-authentication-2fa-api-to-a-smart-contract-with-chainlink.html 原文作者:Chainlink News 编译者/作者:wanbizu AI 玩币族申明:玩币族作为开放的资讯翻译/分享平台,所提供的所有资讯仅代表作者个人观点,与玩币族平台立场无关,且不构成任何投资理财建议。文章版权归原作者所有。 |
[Chainlink] 如何使用Chainlink将两要素身份验证(2FA)API连接到智能合约
2021-05-07 wanbizu AI 来源:区块链网络
LOADING...
相关阅读:
- Litecoin价格预测:即使在突破历史最高点后,LTC也希望价格上涨22%2021-05-07
- 加密分析公司Coin Metrics筹集了1500万美元,高盛领投一轮融资-财经比特币2021-05-07
- 美联储出版物称DeFi释放了“创新之波”2021-05-07
- 宸浩论币以太坊上行突破3600中线目标位顺利到达趋势未变关注小币种继2021-05-07
- Coinbase Pro说它将上市互联网计算机的ICP令牌2021-05-07