美文网首页
Aries建立连接过程介绍

Aries建立连接过程介绍

作者: Dakini_Wind | 来源:发表于2020-09-19 09:25 被阅读0次

Aries建立连接过程介绍

1. Aries通信机制介绍

Aries Agent 之间的消息通信是 peer-to-peer 的。Agents 之间通过互相发送消息实现互动,这种互动可以是简单地交换一个纯文本的信息,也可能是一个相对复杂的询问凭证、提供凭证和验证凭证的过程。

Aries 具有两个级别的消息协议,因为所有的消息都是关于 DIDs 交换的,所以从高等级来说,这个消息机制被称为 DIDComm(DID Communication)

在低级别来说,DIDComm 分为:

  • DIDComm 信封协议 envelope protocol:这个协议只负责消息传递给目的地,而不需要知道消息的具体内容。
  • DIDComm 内容协议 content protocols:内容协议有很多,有的可能很简单,以此交互就行结束,有的可能会负责,需要两到三次的来回交互才能完成。

2. Aries通信案例

这里描述的是Faber和Alice代理建立连接的过程

连接是通过调用自身Agent的API完成的,Aries封装了一系列Indy相关的方法,包括issue-credentialwalletrevocation等。无需基于Indy-sdk进行开发。

我个人觉得Aries用于普通用户和机构,创建Indy网络及创建Steward角色还是需要Indy-sdk完成的。

演示环境搭建(完全一致,无需修改):https://github.com/hyperledger/aries-cloudagent-python/blob/master/demo/AriesOpenAPIDemo.md

  • Faber Agent创建连接邀请

    执行POST /connections/create-invitation,无需任何参数

    Response body:

    {  
    "connection_id": "6296344c-107a-47f4-9c78-2f5628e6d2d8",
    "invitation": {    "@type": 
    "did:sov:BzCbsNYhMrjHiqZDTUASHg;spec/connections/1.0/invitation",   
    "@id": "d63eb958-da64-4522-b6d7-b1464bc3da44",    
    "recipientKeys": [      "HzuztUt2mMJWdGNcQXtPg9MmrMcD517aFGxzmvFzXCse"    ],  
    "serviceEndpoint": "http://10.4.68.245:8020",    
    "label": "Faber.Agent"  }, 
    "invitation_url": "http://10.4.68.245:8020?c_i=eyJAdHlwZSI6ICJkaWQ6c292OkJ6Q2JzTlloTXJqSGlxWkRUVUFTSGc7c3BlYy9jb25uZWN0aW9ucy8xLjAvaW52aXRhdGlvbiIsICJAaWQiOiAiZDYzZWI5NTgtZGE2NC00NTIyLWI2ZDctYjE0NjRiYzNkYTQ0IiwgInJlY2lwaWVudEtleXMiOiBbIkh6dXp0VXQybU1KV2RHTmNRWHRQZzlNbXJNY0Q1MTdhRkd4em12RnpYQ3NlIl0sICJzZXJ2aWNlRW5kcG9pbnQiOiAiaHR0cDovLzEwLjQuNjguMjQ1OjgwMjAiLCAibGFiZWwiOiAiRmFiZXIuQWdlbnQifQ==" }
    
    
  • Alice Agent执行POST /connections/receive-invitation来接收请求(注意:不是接受),将上述invitation部分作为body参数

    (在现实中,invitation应该通过QR码的方式获得,无需加密)

    它会为这个连接新创建一个新的 DID 和 DID 文档,然后将邀请的唯一标识以及新创建的 DID 文档放到一个 连接请求内容协议消息中。这也会创建一个连接的记录,然后这个记录会被记录到自己的 DID 和 DID 文档中。DIDComm 的信封协议(envelop protocol)就是用来封装这个内容协议消息的,使用邀请中的公钥对消息进行加密,然后将消息发送给邀请中指定的服务的 endpoint。

    Response body:

    {
      "initiator": "external",
      "routing_state": "none",
      "updated_at": "2020-04-30 01:46:20.042140Z",
      "invitation_key": "HzuztUt2mMJWdGNcQXtPg9MmrMcD517aFGxzmvFzXCse",
      "invitation_mode": "once",
      "alias": "aaalice",
      "state": "invitation",
      "created_at": "2020-04-30 01:46:20.042140Z",
      "accept": "manual",
      "connection_id": "df98bef2-f67f-410c-8a96-f63405bba8ef",
      "their_label": "Faber.Agent"
    }
    
  • Alice Agent 执行POST /connections/{id}/accept-invitation接受Faber Agent的连接请求,将上面的connection_id作为参数

    Response body

    {
      "initiator": "external",
      "routing_state": "none",
      "updated_at": "2020-04-30 02:38:16.919735Z",
      "invitation_key": "HzuztUt2mMJWdGNcQXtPg9MmrMcD517aFGxzmvFzXCse",
      "invitation_mode": "once",
      "alias": "aaalice",
      "state": "request",
      "created_at": "2020-04-30 01:46:20.042140Z",
      "request_id": "011c4e75-48a4-4976-a7f4-7de8f4dac2b5",
      "accept": "manual",
      "connection_id": "df98bef2-f67f-410c-8a96-f63405bba8ef",
      "my_did": "VNk6eT19CyU4PYzDxfaTp1",
      "their_label": "Faber.Agent"
    }
    
  • Faber Agent完成连接

    Faber Agent执行GET /connections可以获取当前连接(在真是场景中连接是自动完成的)

    Response body:

    {  
    "results": [    {      
    "state": "request",     
    "invitation_key": "HzuztUt2mMJWdGNcQXtPg9MmrMcD517aFGxzmvFzXCse",      
    "routing_state": "none",      
    "accept": "manual",     
    "created_at": "2020-04-30 01:28:13.874808Z",      
    "invitation_mode": "once",      
    "connection_id": "6296344c-107a-47f4-9c78-2f5628e6d2d8",     
    "updated_at": "2020-04-30 02:38:17.219477Z",      
    "their_label": "Alice.Agent",      
    "initiator": "self",      
    "their_did": "VNk6eT19CyU4PYzDxfaTp1"    },    
    {"state": "invitation",      
    "invitation_key": "FqWE3ezBs7Nvxhr19iiTee2Y4emFwLerU3AREGJWQqpd",      
    "routing_state": "none",      
    "accept": "manual",      
    "created_at": "2020-04-30 01:01:43.867887Z",     
    "invitation_mode": "once",      
    "connection_id": "1ab72b8c-6ede-4fad-a6d0-67f6a2ba02ce",      
    "updated_at": "2020-04-30 01:01:43.867887Z",      
    "initiator": "self"    }  ] }
    

    Faber Agent执行POST /connections/{id}/accept-request来完成连接

    Response body:

    {
      "state": "response",
      "invitation_key": "HzuztUt2mMJWdGNcQXtPg9MmrMcD517aFGxzmvFzXCse",
      "routing_state": "none",
      "accept": "manual",
      "created_at": "2020-04-30 01:28:13.874808Z",
      "invitation_mode": "once",
      "connection_id": "6296344c-107a-47f4-9c78-2f5628e6d2d8",
      "my_did": "7GFFH3kvQTnsknu1BT1APi",
      "updated_at": "2020-04-30 02:58:49.381156Z",
      "their_label": "Alice.Agent",
      "initiator": "self",
      "their_did": "VNk6eT19CyU4PYzDxfaTp1"
    }
    

更多流程请阅读:https://github.com/hyperledger/aries-cloudagent-python/blob/master/demo/AriesOpenAPIDemo.md

相关文章

  • Aries建立连接过程介绍

    Aries建立连接过程介绍 1. Aries通信机制介绍 Aries Agent 之间的消息通信是 peer-to...

  • TCP客户端和服务端相关状态说明

    TCP连接的状态 首先介绍一下TCP连接建立与关闭过程中的状态。TCP连接过程是状态的转换,促使状态发生转换的因素...

  • 一次完整的http请求过程

    一个完整的HTTP过程包括建立连接、数据传输、断开连接等七个步骤。 下面详细介绍一下每一步 1、TCP建立连接 H...

  • TCP 的三次握手和四次挥手,了解泛洪攻击么

    引言 TCP 建立连接与断开连接的过程 TCP 泛洪攻击(TCP 建立连接过程中的攻击手段)与防护 TCP 建立连...

  • TCP三次握手和四次挥手

    建立TCP需要三次握手才能建立,而断开连接则需要四次握手。整个过程如下图所示: 建立连接的过程: TCP 连接是通...

  • ssl连接建立过程

    图一: 图二: 图三 SSL连接建立过程: ssl连接建立过程1.client首先发送一条握手信息给服务端,包含两...

  • Https连接建立过程

    Https的全称是Http over SSL,而SSL是在TCP协议之上的保密层,但是它也是属于传输层的,如果直接...

  • Https连接建立过程

    Https的全称是Http over SSL,而SSL是在TCP协议之上的保密层,但是它也是属于传输层的,如果直接...

  • HTTPS连接建立过程

    在面试的过程中经常会被问到http和https相关的问题,包括https连接建立过程,所以就把相关的内容整理下放在...

  • TCP连接建立过程

    TCP三次握手过程: 第一次握手:主机A通过向主机B 发送一个含有同步序列号的标志位的数据段给主机B,向主机B 请...

网友评论

      本文标题:Aries建立连接过程介绍

      本文链接:https://www.haomeiwen.com/subject/wyceyktx.html