@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/身份。 。 。 .