惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
V
Visual Studio Blog
IT之家
IT之家
博客园 - 聂微东
The Cloudflare Blog
月光博客
月光博客
阮一峰的网络日志
阮一峰的网络日志
S
SegmentFault 最新的问题
Apple Machine Learning Research
Apple Machine Learning Research
酷 壳 – CoolShell
酷 壳 – CoolShell
爱范儿
爱范儿
H
Help Net Security
博客园 - 叶小钗
V
V2EX
WordPress大学
WordPress大学
J
Java Code Geeks
Hugging Face - Blog
Hugging Face - Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园_首页
C
Check Point Blog
B
Blog
D
DataBreaches.Net
美团技术团队
罗磊的独立博客

博客园 - 深蓝

从 Chat 到 长程Agent:LLM API 协议的三代进化,为什么我推荐 Responses DeepSeek Harness—— 编程 AI Agent 的三代进化:从"大而全"到"小而美",再到"一切皆插件" 如何用 120 行提示词让 AI 写少一半的代码——ponytail Headroom——又一款AI 编程助手的 Token 省钱利器 AI Coding Agent Token 成本优化指南(下):工具层、代码图谱与多 Agent 协作 AI Coding Agent Token成本优化指南(上):成本结构、使用习惯与模型路由 gongfeng-cli——专为 AI Agent 打造的腾讯工蜂命令行工具 tapd-ai-cli——专为 AI Agent 打造的 TAPD 命令行工具 【译】Harness——用于长时运行应用的智能体框架设计 规范驱动开发(Spec-Driven Development)深入解析——从方法论演进到 AI 时代的软件工程范式转移 用自然语言写控制台命令——AICLI发布 告别审美黑洞!手把手教你用 NotebookLM 给 PPT “一键美颜” 拥抱AI编程,用中文进行规范驱动开发:OpenSpec汉化版正式发布 Web3 与 dApp 基础设施指南【翻译】 Sonic区块链技术调研 区块链分片技术详解:架构、挑战与实践 以太坊Pectra升级技术详解 比特币与以太坊的区块结构设计差异:从默克尔树到全局状态树的进化 符文Runes协议技术详解 基于Ordinals在比特币L1网络实现EVM图灵完备智能合约支持——BxE协议 shardingdb:支持分片和并发读写的 GoLevelDB 以太坊数据存证性能与膨胀率测试 Stable Diffusion XL1.0正式发布了,赶紧来尝鲜吧 直接用中文写提示词的Stable Diffusion扩展:sd-prompt-translator发布 ChatGPT大量封号,推荐几款可平替的AI工具 strchecker——Go源码字符串规范检查lint工具
基于DID实现第三方应用的分布式身份登录
深蓝 · 2023-12-28 · via 博客园 - 深蓝

在我们掌握了DID的基础知识(还没有掌握DID基础知识?请先阅读我之前的关于DID的文章),构建DID平台的时候,DID的常见应用就是基于DID实现第三方平台的登录。接下来,我们假设已经构建了一个基础的DID平台,用长安链实现了DID文档的链上管理,并提供了DID钱包托管用户的公私钥和VC证书,建设全新的第三方系统实现DID登录。

前置条件

我们已经建设了一个DID分布式身份的应用,为每个用户颁发了DID,对应的DID文档也上到了一条区块链(比如长安链)上。每个用户有自己的DID钱包(可以是浏览器插件钱包,也可以是手机APP钱包),在DID钱包中保存了用户的公私钥、DID和各种颁发的证书VC信息。

场景1:DID登录

需求

现在我们要建一个新的服务系统,并希望使用DID进行登录,类似于网上的使用Google账号登录或者微信扫码登录这样的OAuth登录,只要是在长安链上有颁发了身份的用户,都可以通过其DID钱包进行登录。

技术实现

以下是一个简化版的DID钱包登录流程,并以浏览器插件钱包为例:

1.用户在第三方应用上发起登录请求。
2.第三方应用后端生成一个随机数(nonce)并发送给钱包浏览器插件。
3.钱包浏览器插件使用用户的DID私钥对随机数进行签名,并将签名和用户的DID一起发送给第三方应用后端。
4.第三方应用后端将签名和DID发送给DID合约进行验证。
5.DID合约查询区块链上的DID文档,获取DID的公钥,并使用公钥验证签名。如果验证成功,返回用户的身份信息给第三方应用后端。
6.第三方应用后端根据返回的身份信息,完成用户的登录或注册操作,并返回登录结果给用户。

以下是对应的时序图:

sequenceDiagram 用户->>应用前端: 发起登录请求 应用前端->>应用后端: 请求随机数(nonce) 应用后端->>应用前端: 返回随机数(nonce) 应用前端->>钱包插件: 发送随机数(nonce) 用户->>钱包插件: 用DID私钥签名nonce 钱包插件->>应用前端: 发送签名和用户DID 应用前端->>应用后端: 请求验证签名和用户DID 应用后端->>DID合约: 发送签名和用户DID进行验证 DID合约->>应用后端: 查询链上DID文档,返回验证结果和身份信息 应用后端->>应用前端: 返回验证结果和身份信息 应用前端->>用户: 返回登录结果

场景2. 基于VC/VP的DID登录

需求

有些应用并不是任何获得了DID身份的用户就能够登录的,比给企业T做一个员工福利网站,只有企业T的员工才能正常登录。所以我们需要基于VC(可验证凭证)和VP(可验证表示)的DID登录。

技术实现

前置条件是企业T已经作为颁证机构,给自己企业的员工都颁发了员工卡VC,员工在登录网站的时候,需要出示该员工卡VC,验证VC通过才能正常登录。流程如下:

  1. 用户在第三方应用上发起登录请求。
  2. 第三方应用后端生成一个随机数(nonce)和要求的VC类型,发送给钱包浏览器插件。
  3. 钱包浏览器插件根据要求的VC类型,从用户的DID钱包中选择相应的VC,并生成一个VP(包含DID、VC和nonce)。
  4. 用户使用DID私钥对VP进行签名,并将签名的VP发送给第三方应用后端。
  5. 第三方应用后端将签名的VP发送给DID合约,通过查询合约的方式进行验证。
  6. DID合约首先验证VP的签名。如果签名验证通过,继续检查VP中的VC。这包括验证VC的签名、检查VC的颁发者和过期时间等。
  7. 如果VP和VC的验证都成功,DID合约将返回用户的身份信息给第三方应用后端。
  8. 第三方应用后端根据返回的身份信息,完成用户的登录或注册操作,并返回登录结果给用户。

sequenceDiagram 用户->>应用前端: 发起登录请求 应用前端->>应用后端: 请求随机数(nonce)和VC类型 应用后端->>应用前端: 返回随机数(nonce)和VC类型 应用前端->>钱包插件: 发送随机数(nonce)和VC类型 钱包插件->>用户: 选择相应的VC 用户->>钱包插件: 用DID私钥签名VP 钱包插件->>应用前端: 发送签名的VP 应用前端->>应用后端: 请求验证VP和VC 应用后端->>DID合约: 发送VP和VC进行验证 DID合约->>应用后端: 返回验证结果和身份信息 应用后端->>应用前端: 返回验证结果和身份信息 应用前端->>用户: 返回登录结果

总结

基于DID进行登录相对于互联网的OAuth登录有以下优势:

  1. 更高的安全性:在DID登录中,用户的私钥始终保存在钱包中,不会泄露给其他参与方,减少了中心化存储的风险。而在OAuth登录中,用户的访问令牌和刷新令牌需要在第三方应用和授权服务器之间传递,增加了被攻击者截获的风险。
  2. 更好的隐私保护:DID登录允许用户选择性地披露自己的身份信息,甚至是基于零知识证明保护隐私,而不是像OAuth登录那样,将用户的信息都暴露给第三方应用。
  3. 去中心化:DID是基于区块链技术的去中心化身份解决方案,不依赖于任何中心化的身份提供商。这意味着用户可以拥有并控制自己的数字身份,而无需依赖于第三方服务。而OAuth登录依赖于授权服务器,如Google或Facebook,这些服务可能会受到审查、关闭或遭受攻击。
  4. 更简洁的用户体验:DID登录简化了身份验证过程,用户只需要使用钱包生成、管理DID和签名,无需记住多个用户名和密码。而在OAuth登录中,用户需要在不同的授权服务器上创建和管理账户,可能导致多个用户名和密码的混淆。
  5. 更易于实现自主身份:通过使用DID,用户可以建立自主身份(Self-Sovereign Identity,SSI),这是一种用户拥有并控制自己身份信息的模型。在这种模型中,用户可以将身份信息存储在自己控制的设备上,而不是依赖于中心化的身份提供商。这有助于实现更高程度的隐私保护和数据所有权。而在OAuth登录中,用户的身份信息通常由授权服务器管理,用户无法完全控制自己的数据。