应用方接入

本文将为您介绍应用方如何与络谱用户建立连接、要求出示证照以及获得证照验证结果的过程。

接入流程:

  1. 应用方发起verifierCreateProofRequest请求
  2. 应用方与络谱空间App用户建立连接
  3. 获取验证结果

步骤1:发起verifierCreateProofRequest请求

  • 接口url:http://TOOLS_HOST:PORT/anoncreds/verifierCreateProofRequest.json
  • 注意事项:以下3种场景中,只有通用方式的请求参数中需要theirDid

场景1:应用方app方式

应用方app,通过URL调起络谱空间app来请求数字证照

调起URL格式如下:

brop://app.brop.cn/verifier/credentials?proofConditionsQRCodeDataJson=<proofConditionsQRCodeDataJson>

参考示例:

1、调用verifierCreateProofRequest接口获得返回信息,如下所示:

    {
      "code": "SUCCESS",
      "message": {
        "reason": "请求成功!",
        "code": "10000"
      },
      "detail": "{\"requestedPredicates\":[{\"name\":\"name\",\"ptype\":\"==\",\"pvalue\":\"张三\",\"pint\":\"252598315956361\",\"restrictions\":[{\"schemaId\":\"Hgq2y4crjAaxEDCK15Uh3f\",\"credDefId\":\"M9tUJ72o4VcydGgGw7nnwN\"}]}],\"verifyDid\":\"did:brop:9Yp3ZD8FYpXUFNcxWs9cCy\",\"nonce\":\"1204463554675731036523380\",\"verifyName\":\"test\"}"
    }

2、解析得到proofConditionsQRCodeDataJson为:

    {
      "requestedPredicates": [
        {
          "name": "name",
          "ptype": "==",
          "pvalue": "张三",
          "pint": "252598315956361",
          "restrictions": [
            {
              "schemaId": "Hgq2y4crjAaxEDCK15Uh3f",
              "credDefId": "M9tUJ72o4VcydGgGw7nnwN"
            }
          ]
        }
      ],
      "verifyDid": "did:brop:9Yp3ZD8FYpXUFNcxWs9cCy",
      "nonce": "1204463554675731036523380",
      "verifyName": "test"
    }

3、拼接得到调起络谱空间的URL

    brop://app.brop.cn/verifier/credentials?proofConditionsQRCodeDataJson={"requestedPredicates":[{"name":"name","ptype":"==","pvalue":"张三","pint":"252598315956361","restrictions":[{"schemaId":"Hgq2y4crjAaxEDCK15Uh3f","credDefId":"M9tUJ72o4VcydGgGw7nnwN"}]}],"verifyDid":"did:brop:9Yp3ZD8FYpXUFNc                               xWs9cCy","nonce":"704463595464683415583738","verifyName":"test"}

4、应用方app通过拼接后的url唤醒络谱空间App,用户可查看并处理出示请求

场景2:扫描二维码方式

该场景用于应用方在PC网站上提供二维码,请求用户使用络谱空间App扫码

步骤

1、实现一个网络访问方法。 方法中调用了BROPID Tools中的verifierCreateProofRequest接口,并设置了接口中需要的验证数字证照相关的参数。

这是因为verifierCreateProofRequest接口参数数量众多,二维码容量有限,难以呈现在一个二维码中。

2、根据网络访问方法生成二维码内容。 格式:{"proofRequestUrl":"http://[ip]:[port]/[function]}

3、将上一步的内容生成二维码,络谱空间App扫码后,即可查看并处理出示请求

示例: 应用方需要验证用户姓名:

- 方法名称:proofRequest
- 参数:pValue=张三
生成的二维码内容示例:

{"proofRequestUrl":"http://192.168.2.169:8080/proof/proofRequest?pValue=%E5%BC%A0%E4%B8%89"} 请注意如果参数中有中文,需要进行转码。

场景3:通用方式

该方式适用于应用方与络谱空间App用户已建立连接的情况,应用方数据库中记录了用户的匿名Did、密钥和endpoint地址。当应用方需要给用户发送消息时,可用已有的匿名did关联密钥进行加密,向用户发送消息

参考示例:

应用方向已建立连接的用户发送出示证照的请求。 应用方调用verifierCreateProofRequest接口,传入theirDid,该请求通过did关联的endpoint地址进行发送

    //其中theirDid为对方的Did
    {
      "name": "**保险公司",
      "requestedPredicates": [
        {
          "name": "cardNo",
          "ptype": "==",
          "pvalue": "530322199108190723",
          "pint":"4634369623865295517398439172991143506293299",
          "restrictions": [
            {
              "credDefId": "M9tUJ72o4VcydGgGw7nnwN",
              "schemaId": "Hgq2y4crjAaxEDCK15Uh3f"
            }
          ]
        }
      ],
      "walletId": "test-verifier",
      "walletKey": "12345678",
      "theirDid": "did:brop:H4o6VatuZ6BxMwTjFFPvn2"
    }

步骤2:应用方与络谱用户建立连接

  • 已经建立连接:络谱用户不会发起建立请求,不需要执行这个步骤
  • 未建立连接:应用方通过mq消息收到络谱用户的建立连接请求,需要完成以下步骤:

    1. 解析收到的mq消息,获得对方的匿名Did
    2. 调用工具包createAndStoreMyDid接口,创建自己的匿名Did
    3. 调用接口createPairwise,建立did关系对

      参考示例:
      /**
      * 收到建立连接的MQ消息
      * 消息队列名称:ConnectRequest
      * @param request mq消息体
      */
      @JmsListener(destination = "ConnectRequest")
      public void receivedQueue2(String request) {
       //i. 解析收到的mq消息,获得对方的匿名Did
       ConnectRequest connectRequest = JSON.parseObject(requestObj.getString("detail"), ConnectRequest.class);
       String theirDid = connectRequest.getTheirDid();
      
       //ii. 调用工具包createAndStoreMyDid接口,创建自己的匿名Did
       JSONObject myDidResultObj = apiController.createAndStoreMyDid(walletId, walletKey);
       String myDid = myDidResultObj.getJSONObject("detail").getString("myDid");
      
       //iii. 调用接口createPairwise,建立did关系对
       JSONObject pairwiseResultObj = apiController.createPairwise(walletId, walletKey,theirDid,myDid);
       String myDid = myDidResultObj.getJSONObject("detail").getString("myDid");
      
      }
      

步骤3: 获取验证结果

应用方通过MQ消息收到用户出示的证照的验证结果,其中nonce对应ProofRequest中的nonce。

MQ消息队列名称:Proof
验证结果

验证结果中nonce与出示请求返回的nonce一一对应,表示络谱用户提供的证照验证的结果

验证成功示例:

{"code":"SUCCESS","message":{"code":"10000","reason":"请求成功"},"detail":{"nonce":"00E0740081F"}}

验证失败示例:

{"code":"SUCCESS","message":{"code":"13001","reason":"proof验证失败!"},"detail":{"nonce":"00E0740081F"}}

参考示例:
    /**
     * 收到数字证明验证结果的MQ消息
     * @param msg
     */
    @JmsListener(destination = "Proof")
    public void receivedQueue(String msg) {
        //1、解析消息体,得到验证结果和nonce
        //2、业务代码
    }

results matching ""

    No results matching ""