# did **Repository Path**: fxb208/did ## Basic Information - **Project Name**: did - **Description**: 分布式数字身份 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-03-17 - **Last Updated**: 2026-03-17 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 分布式数字身份(DID)演示平台 ## 项目概述 本项目是分布式数字身份的演示系统,基于 W3C DID 标准实现,包含三个核心服务: - **Issue(签发服务)**:负责签发资质凭证(VC) - **Holder(持有方服务)**:管理用户的数字身份和凭证,并向验证方请求资源 - **Verity(验证服务)**:验证凭证的真实性,保护受限资源 ## 技术架构 - **后端** - Spring Boot 3.2.4 - Spring Cloud 2023.0.1 (OpenFeign) - Java 17 - PostgreSQL(分库存储) - **前端** - Vue 3.3.4 - Element Plus 2.3.14 - Vue Router 4.2.4 - Pinia 2.1.6 - Axios 1.5.0 - **基础设施** - Nginx(反向代理) - Docker & Docker Compose ## 模块说明 | 模块 | 端口 | 说明 | |-----|------|------| | holder | 8081 | 持有方服务,管理 DID 和凭证 | | issue | 8082 | 签发服务,签发 VC 凭证 | | verity | 8083 | 验证服务,保护受限资源 | | common | - | 公共模块,包含 Feign 接口 | | web | - | Vue 3 前端工程 | | nginx | 80 | Nginx 反向代理 | ## 服务架构 ``` ┌─────────┐ Feign ┌─────────┐ 携带身份 ┌─────────┐ │ Holder │ ─────────────> │ Verity │ <─────────────> │ Issue │ │ (8081) │ │ (8083) │ │ (8082) │ └─────────┘ └─────────┘ └─────────┘ │ │ │ │ 登录设置身份 │ 拦截器验证X-Holder-Did │ └──────────────────────────┴────────────────────────────┘ ``` ## 接口说明 ### Holder服务 (8081) | 接口 | 方法 | 说明 | |-----|------|------| | `/api/v1/holder/did` | POST | 创建DID身份 | | `/api/v1/holder/did` | GET | 获取所有DID | | `/api/v1/holder/did/{did}` | GET | 获取指定DID | | `/api/v1/holder/credential` | POST | 存储凭证 | | `/api/v1/holder/credential` | GET | 获取凭证列表 | | `/api/v1/holder/auth/login` | POST | 登录(设置当前身份)| | `/api/v1/holder/auth/current` | GET | 获取当前身份 | | `/api/v1/holder/verity/verify` | POST | 验证凭证 | | `/api/v1/holder/verity/student/{id}` | GET | 请求Verity受限资源 | ### Issue服务 (8082) | 接口 | 方法 | 说明 | |-----|------|------| | `/api/v1/issue/issuer` | POST | 创建签发方 | | `/api/v1/issue/issuer` | GET | 获取签发方列表 | | `/api/v1/issue/issuer/{did}` | GET | 获取签发方 | | `/api/v1/issue/template` | POST | 创建凭证模板 | | `/api/v1/issue/template` | GET | 获取凭证模板列表 | | `/api/v1/issue/credential` | POST | 签发凭证 | ### Verity服务 (8083) | 接口 | 方法 | 说明 | |-----|------|------| | `/api/v1/verity/credential` | POST | 验证凭证 | | `/api/v1/verity/presentation` | POST | 验证凭证呈现 | | `/api/v1/verity/student/{id}` | GET | 获取Student(受保护资源)| ## 调用流程 ### 1. 创建身份 ```bash # Holder创建DID身份 curl -X POST "http://localhost:8081/api/v1/holder/did" ``` ### 2. 登录(设置当前身份) ```bash curl -X POST "http://localhost:8081/api/v1/holder/auth/login?did=did:did:xxx" ``` ### 3. 获取凭证 ```bash # Issue创建签发方 curl -X POST "http://localhost:8082/api/v1/issue/issuer?name=学校" # Issue签发凭证 curl -X POST "http://localhost:8082/api/v1/issue/credential" \ -H "Content-Type: application/json" \ -d '{"issuerDid":"did:did:xxx","holderDid":"did:did:xxx","type":"StudentCredential","claims":{"name":"张三","studentNo":"2024001"}}' # Holder存储凭证 curl -X POST "http://localhost:8081/api/v1/holder/credential" \ -H "Content-Type: application/json" \ -d '{"credentialId":"...","issuerDid":"...","holderDid":"...","credentialJson":"..."}' ``` ### 4. 验证凭证 ```bash # Holder请求Verity验证凭证 curl -X POST "http://localhost:8081/api/v1/holder/verity/verify" \ -H "Content-Type: application/json" \ -d '{"@context":["https://www.w3.org/2018/credentials/v1"],...}' ``` ### 5. 访问受保护资源 ```bash # Holder携带身份请求Verity的Student接口 curl -X GET "http://localhost:8081/api/v1/holder/verity/student/1" # Verity拦截器验证 X-Holder-Did,无身份返回 401 ``` ### 6. VP Token 验证流程(推荐) ```bash # Holder 生成 VP Token(包含凭证) curl -X POST "http://localhost:8081/api/v1/holder/auth/vp-token" # 使用 VP Token 访问 Verity 受保护资源 curl -X GET "http://localhost:8081/api/v1/holder/verity/student/1" \ -H "Authorization: Bearer " # Verity 验证 VP 中的凭证,验证成功返回资源 ``` ## 身份验证机制 Verity 服务通过拦截器验证请求者身份,支持两种方式: ### 方式一:简单身份验证 1. 请求头必须包含 `X-Holder-Did` 2. 可选:`X-Holder-Signature` + `X-Holder-Public-Key` 进行签名验证 3. 无身份信息返回 401 Unauthorized ### 方式二:VP Token 验证(推荐) 1. Holder 生成 VP(Verifiable Presentation),包含一个或多个 VC 2. VP 封装到 JWT Token 中 3. 请求时携带 `Authorization: Bearer ` 4. Verity 解析 Token,提取 VP 并验证: - VP 签名验证 - Holder DID 匹配验证 - VP 中包含的 VC 验证 5. 验证通过返回受保护资源 ## 快速开始 ### 方式一:Docker 一键启动(推荐) ```bash # 构建并启动所有服务 docker-compose up -d --build # 查看服务状态 docker-compose ps # 查看日志 docker-compose logs -f # 停止服务 docker-compose down ``` ### 方式二:本地开发模式 ```bash # 1. 启动 PostgreSQL docker-compose up -d postgres # 2. 构建后端项目 ./gradlew build # 3. 启动后端服务 java -jar holder/build/libs/catalog-manage-1.0.0-SNAPSHOT.jar java -jar issue/build/libs/catalog-manage-1.0.0-SNAPSHOT.jar java -jar verity/build/libs/catalog-manage-1.0.0-SNAPSHOT.jar # 4. 启动前端开发服务器 cd web npm install npm run dev ``` ## 访问方式 ### 前端页面 | 访问方式 | URL | 说明 | |---------|-----|------| | **Nginx 统一入口** | http://localhost | 推荐,通过 Nginx 代理所有服务 | | 前端开发服务器 | http://localhost:3000 | 仅本地开发模式可用 | ### 后端 API | 服务 | 直接访问 | 通过 Nginx 访问 | |-----|---------|----------------| | Holder 服务 | http://localhost:8081 | http://localhost/api/v1/holder | | Issue 服务 | http://localhost:8082 | http://localhost/api/v1/issue | | Verity 服务 | http://localhost:8083 | http://localhost/api/v1/verity | ### 使用示例 ```bash # 通过 Nginx 访问 Holder 服务 curl http://localhost/api/v1/holder/did -X POST # 直接访问 Holder 服务 curl http://localhost:8081/api/v1/holder/did -X POST ``` ## 服务端口汇总 | 服务 | 端口 | 说明 | |-----|------|------| | Nginx | 80 | 统一入口(前端 + API 代理)| | Holder | 8081 | 持有方服务 | | Issue | 8082 | 签发方服务 | | Verity | 8083 | 验证方服务 | | PostgreSQL | 5432 | 数据库 |