使用瑞士数字身份公测版、ASP.NET Core和.NET Aspire颁发与验证凭证
本文展示了如何使用瑞士数字身份和信任基础设施(swiyu)、ASP.NET Core和.NET Aspire来颁发和验证身份(可验证凭证)。swiyu基础设施使用提供的通用容器实现,这些容器实现了OpenID for Verifiable Credential Issuance和OpenID for Verifiable Presentations标准,以及许多其他实现可验证凭证的标准。该基础设施可用于实现瑞士数字身份用例。
代码:https://github.com/swiss-ssi-group/swiyu-aspire-aspnetcore
演示:https://swiyuaspiremgmt.delightfulsky-453308fc.switzerlandnorth.azurecontainerapps.io/
设置
基本解决方案需要不同的组件。需要一个Postgres数据库,可供所有四个swiyu提供的通用容器使用;一个安装在移动设备上的数字钱包,用于终端用户身份凭证;两个公共容器,用于实现凭证的颁发和验证以及与钱包和管理应用程序的交互;两个私有通用容器用于管理流程;一个ASP.NET Core应用程序用于实现特定颁发和验证的逻辑。
在生产设置中,ASP.NET Core应用程序很可能在两个独立的解决方案中实现,一个用于颁发凭证,另一个用于验证凭证。
开发设置
为了在开发环境中测试和调试,数字钱包需要用于颁发和验证容器的公共端点。这可以使用ngrok实现,或者通过将应用程序部署到公共端点并在开发设置中使用这些端点。作者将两个容器部署到公共端点,并设置容器配置以匹配。swiyu管理API应受到网络和应用程序安全保护。目前这些API不支持OAuth,因此只能实现网络安全。API必须部署在私有网络中。
颁发凭证
要设置和颁发凭证,需要按照以下说明设置API和配置:
创建了一个新的凭证类型,并在配置文件中描述:
damienbod VC的配置文件在此定义:
要颁发凭证,可以向通用API管理API发送POST请求。可以通过使用API为此颁发者创建凭证,因此必须很好地保护此API,否则任何有权访问的人都有可能颁发新凭证,这意味着从此来源颁发的所有凭证都不可信。调用API和颁发凭证可以实现如下:
|
|
有效负载的主体可以使用API支持的结构设置。credential_subject_data和metadata_credential_supported_id必须与配置中支持的凭证匹配。
|
|
实现了一个Razor页面UI来调用此方法,并为终端用户返回一个QR码,以扫描并将凭证添加到他们的数字钱包中。凭证被添加到钱包中,可以被任何有权访问钱包的人或事物使用。在大多数用例中,颁发凭证需要身份验证和授权。访问钱包也需要身份验证和授权。
|
|
UI显示QR码。
扫描后,使用Javascript检查凭证的状态并用状态更新UI。代码调用状态API:
|
|
验证凭证
凭证的验证方式与颁发凭证类似。swiyu公测版有设置此功能的文档: https://swiyu-admin-ch.github.io/cookbooks/onboarding-generic-verifier/
验证服务类用于调用API:
|
|
使用Razor页面实现UI。
|
|
UI可用于启动验证过程。
验证公测版凭证
swiyu公测版颁发的任何凭证都可以使用您自己的基础设施进行验证。您只需要知道颁发者DID和可验证凭证类型。还需要主题详细信息来请求数据(input_descriptors和path)。
说明与结论
该解决方案正在进行中,作者计划基于此设置实现一些特定用例。作者欢迎改进和建议。计划将其作为参考实现进行维护。请在相关的Github存储库中创建问题或PR。
待解决问题:
- 通用容器API应支持OAuth,目前应用的安全标头较弱
- 解决方案应使用自动基础设施部署,通常使用terraform
- 可以使用API网关保护容器API以及加固API端点
- 公共部署应实现某种DDoS保护,Cloudflare有很好的解决方案
- 需要在UI解决方案中实现深度链接
链接
- https://swiyu-admin-ch.github.io/
- https://www.eid.admin.ch/en/public-beta-e
- https://learn.microsoft.com/en-us/dotnet/aspire/get-started/aspire-overview
- https://www.npmjs.com/package/ngrok
- https://swiyu-admin-ch.github.io/specifications/interoperability-profile/
- https://andrewlock.net/converting-a-docker-compose-file-to-aspire/
- https://swiyu-admin-ch.github.io/cookbooks/onboarding-generic-verifier/
- https://github.com/orgs/swiyu-admin-ch/projects/2/views/2
标准
- https://identity.foundation/trustdidweb/
- https://openid.net/specs/openid-4-verifiable-credential-issuance-1_0.html
- https://openid.net/specs/openid-4-verifiable-presentations-1_0.html
- https://datatracker.ietf.org/doc/draft-ietf-oauth-selective-disclosure-jwt/
- https://datatracker.ietf.org/doc/draft-ietf-oauth-sd-jwt-vc/
- https://datatracker.ietf.org/doc/draft-ietf-oauth-status-list/
- https://www.w3.org/TR/vc-data-model-2.0/