Quill Quill
Home
Connect Wallet
tinywateer
@0xFd
B319

Internet Identity(II)的设计和实现:第三篇

2023-01-12 06:33 Words count: 777
在前两篇文章中,介绍了设计和后端核心代码,这篇文章讲讲前端部分。 说到前端,主要是 Agent-JS,在 IC 上开发 DApp 必须要用到这个库。 Agent-JS 简单来说,是这样: Ed25519:生成公私钥对,实现 SignIdentity Auth...

在前两篇文章中,介绍了设计和后端核心代码,这篇文章讲讲前端部分。

说到前端,主要是 Agent-JS,在 IC 上开发 DApp 必须要用到这个库。

Agent-JS 简单来说,是这样:

  1. Ed25519:生成公私钥对,实现 SignIdentity
  2. Auth Client:请求 II 生成 DelegationIdentity,它提供 transformRequest 方法进行签名
  3. Http Agent :封装 DelegationIdentity、提供 call、query、readState、status 通用函数
  4. Actor:封装 IDL、Http Agent、Canister ID 等生成直接请求后端函数的 Actor

具体的代码还是挺多的,这里不一一列举。

只讲讲 Auth Client 和 DelegationIdentity 的部分。

Auth Client 的核心代码在 这里,也可以看下面的图。

可以看到,使用 Ed25519 生成一对临时的公私钥对,默认有效时间 8 小时,并绑定了 _getEventHandler。

Auth Client 的 login 代码

在 _getEventHandler 中,如果认证成功,会执行 _handleSuccess 函数,_handleSuccess 从返回的数据中提取 Delegation,从而生成 Identity。

_handleSuccess 函数

注意,服务端返回的 message.userPublicKey.buffer 是用户的 Identity 对应的公钥,不是临时公钥。

DelegationChain.fromDelegations 这部分代码在 这里,这也是核心代码。

也可以看图:

DelegationChain 函数

然后调用 DelegationIdentity.fromDelegation 传入 公私钥对(key)、DelegationChain 生成 DelegationIdentity。

具体见:

DelegationIdentity 函数

注意,DelegationIdentity 中的 getPublicKey 返回的是用户身份的公钥,不是临时公钥。

DelegationIdentity 还提供了 sign 函数,通过临时的私钥对请求进行签名,发送给后端。

具体的签名动作是在 transformRequest 函数中,每次发送请求都会执行 transformRequest,后端会验证 Delegation 是否正确。

transformRequest 中的 sender_pubkey 就是用户身份的公钥,在 DApp 中可以拿到并使用。

Reward
0 0
0 times bought
•
0 times reward
0.0
Price(BTC)
0
Paid Times
$0.0
Revenue
0.0%
My Share(%)
Comments 0
Subscribe
tinywateer
@0xFd
B319
7 Posts 0 Subscribers 2 Subscribing
Joined at January 12, 2023
一个修身者 | No any Labels
Subscribe
Related Posts
构建反脆弱的框架 聊聊 IC 的 Certified Variable Internet Identity(II)的设计和实现:第一篇 项目分析:一个去中心化的人才网络 Braintrust 关于 Kubernetes 的那些事儿4:网络
© 2026 Quill
Rules Stats Help Github
Internet Identity(II)的设计和实现:第三篇
Reward