@dfinity/auth-client

中文文档
3.4.3发布于 2025/11/20Apache-2.0TypeScriptES Module构建来源已验证近 30 天下载 2.3万

JavaScript 和 TypeScript 库提供与 IC 互联网身份的简单集成

此软件包已被标记为弃用

This package has been deprecated. Its functionality is now part of `@icp-sdk/auth` (https://js.icp.build/auth), under the `client` submodule.

中文使用文档
文档目录5 节
  1. 安装
  2. 在浏览器中 :
  3. 储存和钥匙管理
  4. 离子管理
  5. 闲置管理器示例使用

@dfinity/auth-客户端

用互联网身份服务认证您的网络应用程序的简单界面

你想知道更多关于开发互联网计算机的信息吗? 访问 开发者 Docs。 。 。 .

额外的 API 文档可以找到 这里。 。 。 .

还在使用 @dfinity/auth-client迁移到 @icp-sdk/auth来啊!


安装

使用 Authclient 键 :

npm i --save @dfinity/auth-client

在浏览器中 :

import { AuthClient } from '@dfinity/auth-client';

要启动 Auth 客户端, 请运行

const authClient = await AuthClient.create();

认证者可以登录

authClient.login({
  // 7 days in nanoseconds
  maxTimeToLive: BigInt(7 * 24 * 60 * 60 * 1000 * 1000 * 1000),
  onSuccess: async () => {
    handleAuthenticated(authClient);
  },
});

它打开一个 identity.ic0.app 窗口中,将您的代表团保存到本地Storage,然后设置您的身份.

然后,你可以使用这个身份 来使用 @dfinity/agent Actor。 。 。 .

const identity = await authClient.getIdentity();
const actor = Actor.createActor(idlFactory, {
  agent: new HttpAgent({
    identity,
  }),
  canisterId,
});

储存和钥匙管理

如果您不愿使用 ECDSA 密钥或默认的 IndexedDb 存储接口,您可以自行提供. 使用自定义存储执行的一些原因可能是:

  • 您喜欢使用本地Storage
  • 你不想把密钥贯穿整个页面负载,以加强安全性
  • 你还有另外一种身份管理策略

有一个导出本地Storage接口, 但是任何执行此接口的结构 AuthClientStorage 界面将工作.

export type StoredKey = string | CryptoKeyPair;
export interface AuthClientStorage {
  get(key: string): Promise<StoredKey | null>;

  set(key: string, value: StoredKey): Promise<void>;

  remove(key: string): Promise<void>;
}

这样你就可以轻松地执行自己的

const noStorageImpl = {
  get(key: string) {
    return Promise.resolve(null);
  },
  set(key: string, value: StoredKey) {
    return Promise.resolve();
  },
  remove(key: string) {
    return Promise.resolve();
  },
};
const authClient = await AuthClient.create({
  storage: noStorageImpl,
});

如果您使用自定义存储执行, 如 LocalStorage 仅支持字符串,您应该使用 keyType 选项 Ed25519 键而不是默认值 ECDSA 键.

const authClient = await AuthClient.create({
  storage: new LocalStorage(),
  keyType: 'Ed25519',
});

离子管理

AuthClient为会话管理提供了两种安全形式. 第一部分是因特网身份认证代表团 maxTimeToLive 选项,以纳秒表示 DelegationIdentity 你回来是有效的。 第二个是Idle管理器,该管理器使用键盘,鼠标和触摸屏身份. Idle 管理器将自动登录出您, 如果您在一段时间内不与浏览器互动 .

如果你没有给IdleManager通过任何选项,它将会在10分钟的不活动后,通过移除 DelegationIdentity 从本地Storage 调用 window.location.reload()。 。 。 .

如果你通过一个 onIdle 选项,它将在用户闲置时调用此功能,替换默认窗口. location.reload () actual. 在闲置的“管理器”创建后,您也可以注册回调 idleManager.registerCallback() 方法,它也会取代默认的回调.

IdleManager的全套选项是:

  /**
   * Callback after the user has gone idle
   */
  onIdle?: IdleCB;
  /**
   * timeout in ms
   * @default 30 minutes [600_000]
   */
  idleTimeout?: number;
  /**
   * capture scroll events
   * @default false
   */
  captureScroll?: boolean;
  /**
   * scroll debounce time in ms
   * @default 100
   */
  scrollDebounce?: number;

此外,AuthClient还接受另外几面旗帜,用于: idleOptions 来控制 IdleManager :

  /**
   * Disables idle functionality for {@link IdleManager}
   * @default false
   */
  disableIdle?: boolean;

  /**
   * Disables default idle behavior - call logout & reload window
   * @default false
   */
  disableDefaultIdleCallback?: boolean;

闲置管理器示例使用

const authClient = await AuthClient.create({
  idleOptions: {
    idleTimeout: 1000 * 60 * 30, // set to 30 minutes
    disableDefaultIdleCallback: true // disable the default reload behavior
  }
});
// ...authClient.login()
const identity = await authClient.getIdentity();
const actor = Actor.createActor(idlFactory, {
  agent: new HttpAgent({
    identity,
  }),
  canisterId,
});

refreshLogin() {
  // prompt the user then refresh their authentication
  authClient.login({
    onSuccess: async () => {
      const newIdentity = await AuthClient.getIdentity();
      Actor.getAgent(actor).replaceIdentity(newIdentity);
    }
  });
}

authClient.idleManager?.registerCallback?.(refreshLogin);

在这个代码中,我们创建 authClient 30分钟的闲暇时间 当用户闲置时,我们取消他们的身份,并促使他们再次登录.

用户登录后,可以在演员中设置新身份而无需重新加载页面.

注:取决于 @dfinity/代理服务器 财务报告和审定财务报表 @dfinity/身份。 。 。 .

版本与发布记录

@dfinity/auth-client 共发布 101 个版本,首次发布于 2021/04/30;过去 12 个月发布了 1 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
3.4.3latest2025/11/2011 个月前
3.4.22025/11/111 年前
3.4.12025/10/241 年前
3.4.02025/10/221.1 年前
3.3.12025/10/211.1 年前
3.3.02025/10/141.1 年前

其他发布通道:react-native → 0.19.3-react-native,beta → 3.2.0-beta.0。

关于 @dfinity/auth-client 的常见问题

@dfinity/auth-client 是什么?

JavaScript 和 TypeScript 库提供与 IC 互联网身份的简单集成注意:该包已被作者标记为弃用——This package has been deprecated. Its functionality is now part of `@icp-sdk/auth` (https://js.icp.build/auth), under the `client` submodule.

如何安装 @dfinity/auth-client?

在项目目录运行 npm install @dfinity/auth-client,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:@dfinity/agent(3.4.3)、@dfinity/identity(3.4.3)、@dfinity/principal(3.4.3)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。

@dfinity/auth-client 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@dfinity/auth-client 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@dfinity/auth-client 可以商用吗?

@dfinity/auth-client 使用 Apache-2.0 许可。宽松许可:允许商业使用、修改和再分发,并附带明确的专利授权;分发时需保留许可与 NOTICE 文件,修改过的文件要注明改动。以上为概括,不构成法律意见,请以许可原文为准。

@dfinity/auth-client 的下载量有多少?

根据 npm 官方下载统计,@dfinity/auth-client 在 2026/10/12 – 2026/11/10 这 30 天内被下载 22,862 次,日均约 762 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@dfinity/auth-client 还在维护吗?

最新版本 3.4.3 发布于 2025/11/20(11 个月前);至今共发布 101 个版本,其中过去 12 个月发布了 1 个;首次发布于 2021/04/30。作者已将其标记为弃用,新项目建议寻找替代方案。