LOADING...
LOADING...
LOADING...
当前位置: 玩币族首页 > 行情分析 > [Chainlink] 如何使用Chainlink将两要素身份验证(2FA)API连接到智能合约

[Chainlink] 如何使用Chainlink将两要素身份验证(2FA)API连接到智能合约

2021-05-07 wanbizu AI 来源:区块链网络

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

职位规格

{“启动器”: [
{
“type”: “runlog”,
“params”: {
“address”: “0xa244b30a48559d16078bb151f342d3f12219142f”
}
}
], “任务”: [
{
“type”: “2fa-maticmumbai”,
“confirmations”: null,
“params”: {
}
},
{
“type”: “ethbool”,
“confirmations”: null,
“params”: {
}
},
{
“type”: “ethtx”,
“confirmations”: null,
“params”: {
}
}
],“ startAt”:null,“ endAt”:null}

在作业规范中,启动器是触发或启动作业的东西。 在这种情况下,启动器设置为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请求。
我们要在参数中发出的HTTP POST请求被传递给req变量。 该变量在requestGAPINCheck函数中作为智能合约代码的一部分分配(您可以在本节的上方看到)。

eq.add(“ customerid”,_customerId);
req.addInt(“ hashedpin”,_hashedpin);

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

玩币族申明:玩币族作为开放的资讯翻译/分享平台,所提供的所有资讯仅代表作者个人观点,与玩币族平台立场无关,且不构成任何投资理财建议。文章版权归原作者所有。

LOADING...
LOADING...