身份验证#
如果你使用 Agentic Wallet#
Agentic Wallet 支持两种验证方式:
通过邮箱验证
通过 API Key 验证
用邮箱即可创建/使用钱包,无需注册开发者账号或配置密钥,适合快速上手体验。
- 1和你的 Agent 对话plaintext
我要使用邮箱登录 Agentic Wallet - 2输入你的邮箱plaintext
<email> - 3输入邮箱验证码plaintext
<otp-code>
说明
私钥在 TEE 环境中生成和保管,不会暴露给任何人,包括你的 Agent。同一邮箱再次登录将恢复已有钱包,无需重新创建。
如果你使用 Open API#
使用 Onchain OS Skills/Open API 也可以通过 API Key 验证,你需要先在开发者管理平台创建项目并生成 API key。详细的步骤和相关资源请参考这里。
所有对 API 发起访问的请求都需要包括下面信息来进行身份认证:
- OK-ACCESS-KEY:API key
- OK-ACCESS-TIMESTAMP:发起请求的时间(UTC)。ISO 格式,如:2020-12-08T09:08:57.715Z
- OK-ACCESS-PASSPHRASE:创建 API key 时指定的 passphrase
- OK-ACCESS-SIGN:签名
签名步骤:
- 1拼接预哈希字符串
将 timestamp、method、requestPath、body 拼接成一个字符串。
- 2HMAC SHA256 签名
用 secret key(在创建 API key 时生成)对预哈希字符串进行签名。
- 3Base64 编码
对签名结果做 Base64 编码。
解释
例如,sign=CryptoJS.enc.Base64.stringify(CryptoJS.HmacSHA256(timestamp + 'GET' + '/api/v6/dex/aggregator/swap', SecretKey))。其中,timestamp 与 OK-ACCESS-TIMESTAMP 必须相同。GET 是 method(HTTP请求方法,字母全部大写)。/api/v6/dex/aggregator/swap 是 requestPath(请求接口路径)。body 为空,如果请求没有请求体(通常为 GET 请求),那 body 可省略。
注意
时间戳与服务端时差不得超过 30 秒。POST 请求需包含原始请求体参与签名计算。Secret key 仅创建时可见,请通过安全渠道存储。
Postman 示例
JavaScript 示例
Postman 是一款流行的 API 开发和测试工具,允许开发人员设计、测试和记录 API。它提供了对用户友好的图形界面,用于向 API 发送 HTTP 请求。
如果你还没有安装 Postman,你可以免费从 Postman 网站下载它:https://www.postman.com/
提示
这个示例需要你具备对 Postman 的基础理解。
- 1添加参数
适用于 GET 请求。如果请求需要查询参数,可以在 Params 选项卡下添加查询参数的 key-value pair。
- 2设置标题
在 Headers 选项卡下,添加以下键-值对:
OK-ACCESS-KEYOK-ACCESS-PASSPHRASE
- 3添加正文
适用于 POST 请求。如果请求需要请求主体,可以在 Body 选项卡下:
- 下拉菜单中选择 raw 和 JSON
- 使用 JSON 格式输入请求主体
- 4设置预请求脚本
用于生成签名 (
OK-ACCESS-SIGN) 和时间戳 (OK-ACCESS-TIMESTAMP)。在 Pre-request Script 选项卡下,根据请求类型插入以下脚本(GET 请求会排除请求主体;按需编辑密钥)。GET 请求示例:
javascriptvar method = pm.request.method; var now = new Date(); var isoString = now.toISOString(); var path = pm.request.url.getPathWithQuery(); var sign=CryptoJS.enc.Base64.stringify(CryptoJS.HmacSHA256(isoString + method + path, pm.variables.replaceIn('{{secret_key}}'))); pm.request.headers.add({ key: 'OK-ACCESS-SIGN', value: sign }); pm.request.headers.add({ key: 'OK-ACCESS-TIMESTAMP', value: isoString });POST 请求示例:
javascriptvar method = pm.request.method; var now = new Date(); var isoString = now.toISOString(); var path = pm.request.url.getPathWithQuery(); var bodyStr = pm.request.body.raw; var sign=CryptoJS.enc.Base64.stringify(CryptoJS.HmacSHA256(isoString + method + path + bodyStr, pm.variables.replaceIn('{{secret_key}}'))) pm.request.headers.add({ key: 'OK-ACCESS-SIGN', value: sign }); pm.request.headers.add({ key: 'OK-ACCESS-TIMESTAMP', value: isoString });