互联网计算机开发基础概念之principal 和 identity

简介: principal 和 identity 是 Dfinity 开发人员在开始与 Internet Computer 交互和构建去中心化应用程序时需要了解的基本概念。

principalidentity 是 Dfinity 开发人员在开始与 Internet Computer 交互和构建去中心化应用程序时需要了解的基本概念。

本文以 principalidentity (互联网身份) 的定义启动 Internet Computer 基础系列,以管理部署在 Internet Computer 上的应用程序。本文将描述开发人员在开始与  Internet Computer  交互和构建简单应用程序时需要了解的基本概念。

什么是 Internet Computer?

Internet Computer 是一个用于构建互联网应用程序的新平台,它结合了 AWS 等云提供商的功能与 Ethereum 或 Solana 等分布式区块链的功能。Internet Computer 非常适合三个场景:

  • 使 WEB或者移动应用程序更加透明、弹性和审查证明
  • 加速代币、NFT、DeFi 等区块链应用程序以网络速度运行,比以太坊等区块链快数百或数千倍且成本更低
  • 将这两种类型的应用程序组合到一个包中,使开发人员能够提供新型服务,如下一代 NFT 和开放治理

在实施层面, Internet Computer  是一个遍布全球的分布式数据中心(节点)网络,运行应用程序代码并存储数据。 Internet Computer  是一种协议,意味着节点的网络是开放的,因此任何人都可以加入以提供计算能力并赚取 Gas 费作为回报。

Internet Computer  应用程序由称为罐式(canister)智能合约的简单构建块组成。可以将容器视为类似于面向对象编程中的对象的,容器结合了代码和数据,可以与外部世界进行通信:用户、网络服务和其他容器。

什么是主体 principal

主体 principal 是可以与计算机系统交互并可以为此目的而被识别的身份, Internet Computer 有两种类型的主体:

  • 用户:可以通过部署容器(canisters)、将 ICP 令牌从一个帐户转移到另一个帐户或调用容器(canisters)方法来与 Internet Computer 交互
  • 容器 canisters :可以以编程方式执行同一组操作的容器

通常情况下在谈论主体 principal 时,真正的意思是 principal id ,这是分配给主体 principal 的唯一标识符,可用于例如指定用户或容器(canisters)可以访问的资源。在 Internet Computer  文档和工具中,将交替使用 principal  和 principal id ,以下是 principal id 的文本表示示例:

dfx identity get-principal
nfxu4-cn7qt-x7r3c-5dhnk-dcrct-gmgoz-67gcg-5glvc-2krhv-gcmsr-qqe

主体 principal 类似于 SSH 的公钥,例如,将 SSH 的公钥添加到 GitHub 以便能够访问私有存储库。同样,需要将委托人注册到计划在未来与之交互的服务中。主体 principal (如 SSH 的公钥)不是机密的,可以在需要时与任何人共享它们。

principal 和 SSH 公钥的共性:

  • 不是秘密,可以公开
  • 需要注册需要访问的服务
  • 需要一个额外的密钥来进行身份验证

为什么需要主体 principal

作为开发人员,需要一个主体 principal  来向 Internet Computer 表明自己的身份,以执行以下功能:

  • 部署容器 canister (与部署 dapp 或智能合约相同)
  • 与已部署的容器 canister 交互,例如,通过调用容器方法。
  • 管理容器 canister,例如,停止或更改参数,并管理托管付款

容器canister使用主体 principal 来确保每个操作仅由授权用户执行。例如,用户需要将自己标识为特定委托人,以便能够使用更新的代码重新部署容器canister 或将容器 canister 余额转账到另一个钱包。

identity (互联网身份)在幕后也使用主体 principal  来向各种面向用户的 dapp 进行识别。但是,在这种情况下,很少会直接看到委托人。

如何获取当前主体 principal

大多数时候,将在 IC dapp 开发过程中与委托人互动。在开发机器上,可以通过在控制台中输入以下命令来获取当前主体 principal

dfx identity get-principal

将可以看到  principal id

tpxoo-urhj2-ypwlz-t7hjm-dtjyi-xbfna-kchfn-kyibd-hke4e-dkzym-gqe

什么是互联网身份 identity

由于用户主体 principal 是非对称加密密钥对的公钥的文本表示,因此每个主体 principal 都有一个关联的私钥。这两个密钥都存储为一个称为 identity (互联网身份)的对象,可以在机器上安装多个 identity (互联网身份),并且每个 identity (互联网身份)都可以有一个名称。

虽然名称相似,但像 identity (互联网身份)这样的命令与通过 identity (互联网身份)服务创建的 Web 身份不同。

identity (互联网身份)存储在 ~/.config/dfx/identity/<identity_name>/identity.pem 路径的用户目录中,命令行应用程序将使用该 .pem 文件向服务确认身份。此过程类似于访问 SSH 服务器,需要 SSH 私有密钥来证明身份并访问之前添加公钥的服务器。

如果丢失了身份 identity (互联网身份)文件(例如,丢失了计算机),将无法再将自己标识为该主体。identity (互联网身份) .pem 文件是高度机密的,永远不应该与任何人分享它们。

默认情况下,当 dfx 第一次在新机器上运行时会创建一个新身份。此身份称为“默认身份”,默认情况下将用于所有 IC 交互,除非手动选择其他身份。

如何将主体设置为容器控制器

部署容器 canister 时,需要确保将当前主体设置为容器 canister控制器。控制器是可以管理容器 canister的主体 principal ,例如:

  • 部署和更新容器 canister
  • 容器钱包中的 cycles 控制(用于支付计算和数据存储费用)

要显示其中一个容器  canister 的主体 principal ,可以运行 dfx canister status <canister_name>,如下:

dfx canister status hello

显示如下:

Canister status call result for hello.
Status: Running
Controllers: nfxu4-cn7qt-x7r3c-5dhnk-dcrct-gmgoz-67gcg-5glvc-2krhv-gcmsr-qqe
Memory allocation: 0
Compute allocation: 0
Freezing threshold: 2_592_000
Memory Size: Nat(363948)
Balance: 4_000_000_000_000 Cycles
Module hash: 0xfa16da03d37cffe89382b29db2077de1229841ea31b91b8c040b740317390cb7

要将其中一个身份设置为控制器,可以使用 dfx canister update-settings <canister_name> --controller <identity_name_or_principal_id>,如下:

dfx canister update-settings hello --controller old_identity

结果如下:

Set controller of "hello" to: old_identity

总结

主体 principal  是标识容器 canister  和用户的公钥的文本表示。每个委托人都是身份的一部分,一对公钥(委托人)和一个秘密密钥。身份信息存储在机器上的 ~/.config/dfx/identity 文件夹中。

管理身份需要了解指令:

  • dfx identity import  在机器之间复制身份并导入它们
  • dfx identity new  创造一个新的身份
  • dfx identity use 切换身份
  • dfx identity whoami 检查当前使用的身份


相关文章
|
5月前
|
XML 存储 安全
【揭秘SAML协议 — Java安全认证框架的核心基石】 从初识到精通,带你领略Saml协议的奥秘,告别SSO的迷茫与困惑
SAML(Security Assertion Markup Language)是由OASIS制定的基于XML的开放标准。它用于在身份提供者(IdP)和服务提供者(SP)之间交换身份验证和授权数据,从而支持跨域单点登录,提高身份认证和授权管理的安全性和效率。
419 2
【揭秘SAML协议 — Java安全认证框架的核心基石】 从初识到精通,带你领略Saml协议的奥秘,告别SSO的迷茫与困惑
|
2月前
|
机器学习/深度学习 人工智能 API
【认知服务 Azure Cognitive Service】使用认知服务的密钥无法访问语音服务[ErrorCode=AuthenticationFailure] (2020-08时的遇见的问题,2020-09月已解决)
【认知服务 Azure Cognitive Service】使用认知服务的密钥无法访问语音服务[ErrorCode=AuthenticationFailure] (2020-08时的遇见的问题,2020-09月已解决)
|
5月前
|
JSON 安全 算法
【揭秘OIDC协议 — Java安全认证框架的核心基石】 从初识到精通,带你领略OIDC协议的奥秘,告别SSO的迷茫与困惑
【揭秘OIDC协议 — Java安全认证框架的核心基石】 从初识到精通,带你领略OIDC协议的奥秘,告别SSO的迷茫与困惑
208 0
|
5月前
|
机器学习/深度学习 安全 搜索推荐
【现代密码学】笔记3.4-3.7--构造安全加密方案、CPA安全、CCA安全 《introduction to modern cryphtography》
【现代密码学】笔记3.4-3.7--构造安全加密方案、CPA安全、CCA安全 《introduction to modern cryphtography》
193 0
|
缓存 数据安全/隐私保护
【项目基础】SSO理论篇
SSO:单点登录(Single Sign On),简称为 SSO,在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统
|
存储 分布式计算 大数据
大数据开发基础的计算机网络的Session/Cookie/Token等概念
随着互联网的发展,计算机网络中的Session/Cookie/Token等概念也越来越受到关注。这些概念在大数据开发中具有重要的应用价值,本篇文章将为大家介绍它们的基本概念、工作原理以及应用场景。
121 0
|
安全 Go API
第二十四章 CSP Session 管理 - 认证架构
第二十四章 CSP Session 管理 - 认证架构
90 0
|
安全 Windows 数据安全/隐私保护
|
XML 安全 C#
C#笔记32:FRAMEWORK安全性之代码访问安全和角色安全
C#笔记32:FRAMEWORK安全性之代码访问安全和角色安全 本章概要: 1:FRAMEWORK安全性中的几个概念    1.1:安全权限    1.2:类型安全和安全性    1.
902 0