@ capgo/ 电容器- passkey
在您的 Capacitor app 上添加密码而不重写您的网页登录: 插件可以shim navigator.credentials 并转发到iOS和Android上的本地密码API.
🤖 建筑与AI编码代理? 安装 Capgo 技能 所以克劳德代码,代码,光标,副驾驶,或双子座CLI知道如何安装和使用
@capgo/capacitor-passkey在您的电容应用程序中:npx skills add Cap-go/capgo-skills。然后问你的经纪人: 加上@capgo/capor-passkey到我的Capacitor应用上,并把它接上。" 代理设置指南 • 妇女 主机磁共振
主要特点
- WebAuthn shim (英语)数字 :
autoShimWebAuthn()补丁navigator.credentials.create财务报告和审定财务报表get页:1publicKey请求. - 直接 API数字 :
createCredential()财务报告和审定财务报表getCredential()从您的后端取 JSON 安全 WebAuthn 选项 . - 本地 APIs: 认证 iOS和Android上的信用经理服务.
- 项目设置: 可以在
cap sync。 。 。 . - 支持检查数字 :
isSupported()财务报告和审定财务报表getConfiguration()。 。 。 . - 平台: iOS,Android和Web. 互联网档案馆的存檔,存档日期2013-12-02. 在网页上,插件使用浏览器WebAuthn API.
为什么这个插件
大多数 Capacitor apps 已经根据 :
await navigator.credentials.create({ publicKey: registrationOptions });
await navigator.credentials.get({ publicKey: requestOptions });
此插件保持该形状为 Capacitor app :
- 它可以自动拍出
navigator.credentials.create/get页:1publicKey请求. - 它向iOS和Android上的本地密码API转发了呼叫.
- 它返回类似浏览器的认证对象,这样现有的代码就可以继续工作.
- 它可以在期间自动配置生成的iOS和Android主机项目
cap sync/update。 。 。 . - 它也暴露出当您的后端已经返回了WebAuthn JSON时直接的JSON安全方法.
它没有做什么:
- 它不会给你带来后端挑战.
- 它不会消除您网站主机的需要
apple-app-site-association财务报告和审定财务报表assetlinks.json。 。 。 . - 它不会让Android本地密码向服务器报告您网站的HTTPS来源. 在Android上,普通的应用程序使用该应用程序的出处(
android:apk-key-hash:...) (中文(简体) ).
文档
这里有最完整的医生: https://capgo.app/docs/plugins/passkey/ (英语)
兼容性
| 插件版本 | 电容兼容性 | 维护 |
|---|---|---|
| 联合国 | 联合国 | ✅ |
| 页:1 | 页:1 | 应要求 |
| 页:1 | 页:1 | ❌ |
| 页:1 | 页:1 | ❌ |
说明: 此插件的主要版本沿用了Capacitor的主要版本. 使用匹配您的电容安装的版本 .
安装
您可以使用我们的 AI 辅助设置安装插件 。 使用以下命令将 Capgo 技能添加到您的 AI 工具 :
npx skills add https://github.com/cap-go/capacitor-skills --skill capacitor-plugins
然后使用下列提示:
Use the `capacitor-plugins` skill from `cap-go/capacitor-skills` to install the `@capgo/capacitor-passkey` plugin in my project.
如果您更喜欢手动设置,请通过运行以下命令来安装插件,并遵循下面的平台特定指令:
bun add @capgo/capacitor-passkey
浏览器- 类似设置
- 配置插件一次进入
capacitor.config.ts或者说capacitor.config.json。 。 。 . - 从标准包入口导入插件 .
- 打电话
CapacitorPasskey.autoShimWebAuthn()一次在应用靴子. - 保留您已有的浏览器
navigator.credentials.create/get代码不变.
1. 配置 capacitor.config.*
import type { CapacitorConfig } from '@capacitor/cli';
const config: CapacitorConfig = {
appId: 'app.capgo.passkey.example',
appName: 'My App',
webDir: 'dist',
plugins: {
CapacitorPasskey: {
origin: 'https://signin.example.com',
autoShim: true,
domains: [
'signin.example.com',
],
},
},
};
export default config;
配置密钥 :
origin:该应用程序的主要HTTPS依赖方源.domains: 可选的额外依赖方主机名以本地方式在cap sync/update。 。 。 .autoShim: 默认为true。这只控制本地cap sync/update自动配置钩.
然后同步本地项目 :
bunx cap sync
期间 cap sync 编号 : cap update,插件自动补丁生成的主机应用程序 :
- iOS:更新应享权利文件和电线
CODE_SIGN_ENTITLEMENTS如果需要的话. - 安卓:注射剂
asset_statements元数据并写入生成的字符串资源.
您不需要每次手动编辑主机项目文件 .
2. 在靴子上安装 " Shim "
import { CapacitorPasskey } from '@capgo/capacitor-passkey';
await CapacitorPasskey.autoShimWebAuthn();
这个电话是 plugins.CapacitorPasskey 从本地 Capacitor 配置并明确安装 WebAuthn shim .
3. 保留现有的WebAuthn呼叫
之后,你的浏览器风格代码可以保持不变:
const registration = await navigator.credentials.create({
publicKey: {
challenge: crypto.getRandomValues(new Uint8Array(32)),
rp: {
id: 'signin.example.com',
name: 'Example Inc',
},
user: {
id: crypto.getRandomValues(new Uint8Array(32)),
name: '[email protected]',
displayName: 'Ada Lovelace',
},
pubKeyCredParams: [
{ type: 'public-key', alg: -7 },
{ type: 'public-key', alg: -257 },
],
},
});
const authentication = await navigator.credentials.get({
publicKey: {
challenge: crypto.getRandomValues(new Uint8Array(32)),
rpId: 'signin.example.com',
},
});
钩子配置
插件钩子只补丁Capacitor生成的本地主机应用文件.
- 它不会碰你的应用程序源代码.
- 它不要求您永久手动编辑 Xcode 或 Android 项目文件 .
- 它不为您发布或生成网站关联文件.
直接 JSON 安全 API
如果后端已经返回 PublicKeyCredentialCreationOptionsJSON 或者说 PublicKeyCredentialRequestOptionsJSON,您可以直接调用插件 :
import { CapacitorPasskey } from '@capgo/capacitor-passkey';
const registration = await CapacitorPasskey.createCredential({
origin: 'https://signin.example.com',
publicKey: registrationOptionsFromBackend,
});
const authentication = await CapacitorPasskey.getCredential({
origin: 'https://signin.example.com',
publicKey: requestOptionsFromBackend,
});
您仍然需要的网站文件
Passkey 只有在您的应用程序与您的网站相同的依赖方域关联时才会工作.
iOS 网站协会文件
主办单位a apple-app-site-association 在您的依赖方域上的文件 :
https://signin.example.com/.well-known/apple-app-site-association
示例
{
"webcredentials": {
"apps": [
"ABCDE12345.app.capgo.passkey.example"
]
}
}
注释:
- 文件必须使用 HTTP 服务
200。 。 。 . - 不添加一个
.json扩展名. - 这个
webcredentials域名必须匹配用于密码的依赖方id. - 插件勾钩为您写入相关域名权限
cap sync/update。 。 。 . - 在iOS 17.4和较新版本上,插件使用浏览器风格的客户端数据 API,所以配置的 HTTPS 来源在
clientDataJSON。 。 。 .
Android 网站协会文件
在 :
https://signin.example.com/.well-known/assetlinks.json
示例
[
{
"relation": [
"delegate_permission/common.handle_all_urls",
"delegate_permission/common.get_login_creds"
],
"target": {
"namespace": "android_app",
"package_name": "app.capgo.passkey.example",
"sha256_cert_fingerprints": [
"AA:BB:CC:DD:EE:FF:00:11:22:33:44:55:66:77:88:99:AA:BB:CC:DD:EE:FF:00:11:22:33:44:55:66:77:88:99"
]
}
}
]
- 使用与您的依赖方 ID 相同的域名 .
- 包含您需要的每个签名证书指纹, 包括测试时构建的调试 .
- 插件钩子写着
asset_statements元数据及生成的字符串资源cap sync/update。 。 。 . - 您的网站仍然需要服务
assetlinks.json文档.
后端注释
此插件保留了前端的WebAuthn API形状,但本地平台与浏览器后端合同并不相同.
- iOS 17.4+ 可以编码您为 shim 或直接 API 配置的 HTTPS 来源 .
- Android 证书管理器有 没有 动作像一个特权浏览器应用程序。 原生反应源与Android应用签名(
android:apk-key-hash:...),而不是自动进入您的网站. - 在配置了数字资产链接后,Android仍然可以使用与您网站相同的依赖方和密码. 不同的部分是字义
clientDataJSON.origin绳子. - 如果您的服务器严格验证
clientDataJSON.origin,允许Android应用软件与您的网络来源并行. - 您的后端仍然需要正常的 WebAuthn 挑战生命周期和签名验证 .
网络行为
- 在网络上,插件转发到真实的浏览器WebAuthn API.
- 在原生Capacitor上,shim会返回由原生API支持的类似浏览器的认证对象.
- 打电话
CapacitorPasskey.autoShimWebAuthn()在使用浏览器风格的WebAuthn调用之前,曾经在拖曳过程中. - 有条件的调解目前回归
false。 。 。 .
示例应用
这个 example-app/ 文件夹显示自动shim流 :
example-app/capacitor.config.json配置插件.example-app/src/main.js进口CapacitorPasskey从@capgo/capacitor-passkey。 。 。 .example-app/src/main.js电话CapacitorPasskey.autoShimWebAuthn()在靴子上.- 实际的注册和认证仍然通过
navigator.credentials.create/get。 。 。 .
API 密码
shimWebAuthn(...)getConfiguration()autoShimWebAuthn(...)createCredential(...)getCredential(...)isSupported()getPluginVersion()- 接口
- 类型异名
电容Passkey插件.
使用 autoShimWebAuthn() 以保留 navigator.credentials.create/get
密码在一个电容软件内工作.
shimWebAuthn (...) (英语)
shimWebAuthn(options?: ShimWebAuthnOptions | undefined) => void
在本地插件上安装浏览器风格的 WebAuthn shim .
闪闪发光 navigator.credentials.create/get 页:1 publicKey
请求和返回类似浏览器的证书对象.
要手动覆盖自动装入配置时使用此功能 .
| 参数 | 类型 |
|---|---|
options | ShimWebAuthnOptions |
自: 1.0.0 (单位:千美元)
获取配置 ()
getConfiguration() => Promise<PasskeyRuntimeConfiguration>
从主机 Capacitor app 装入插件配置 .
这是 plugins.CapacitorPasskey 从 capacitor.config.*。 。 。 .
回返情况: Promise<PasskeyRuntimeConfiguration>
自: 1.1.0 国家
自动ShimWebAuthn(...)
autoShimWebAuthn(options?: ShimWebAuthnOptions | undefined) => Promise<PasskeyRuntimeConfiguration>
使用主机应用程序配置安装浏览器风格 shim .
这是保持现有浏览器WebAuthn代码工作的最简单方式:
配置插件在 capacitor.config.*,然后在
应用靴子.
| 参数 | 类型 |
|---|---|
options | ShimWebAuthnOptions |
回返情况: Promise<PasskeyRuntimeConfiguration>
自: 1.1.0 国家
创建证书(...)
createCredential(options: CreateCredentialOptions) => Promise<PasskeyRegistrationCredential>
从 JSON 安全 WebAuthn 请求注册密码 .
当您的后端已经返回时, 此方法很有用
PublicKeyCredentialCreationOptionsJSON 形式.
| 参数 | 类型 |
|---|---|
options | CreateCredentialOptions |
回返情况: Promise<PasskeyRegistrationCredential>
自: 1.0.0 (单位:千美元)
获得证书(...)
getCredential(options: GetCredentialOptions) => Promise<PasskeyAuthenticationCredential>
使用 JSON 安全 WebAuthn 请求中存在的密码认证 .
当您的后端已经返回时, 此方法很有用
PublicKeyCredentialRequestOptionsJSON 形式.
| 参数 | 类型 |
|---|---|
options | GetCredentialOptions |
回返情况: Promise<PasskeyAuthenticationCredential>
自: 1.0.0 (单位:千美元)
已支持 ()
isSupported() => Promise<PasskeySupportResult>
报告当前运行时间是否有密码.
回返情况: Promise<PasskeySupportResult>
自: 1.0.0 (单位:千美元)
获取 PluginVersion ()
getPluginVersion() => Promise<PluginVersionResult>
返回当前平台执行版本标记 .
回返情况: Promise<PluginVersionResult>
自: 1.0.0 (单位:千美元)
接口
ShimWebAuthn 选项
安装浏览器风格 shim 时使用的选项 .
| Prop | 类型 | 说明 |
|---|---|---|
origin | string | 可选的HTTPS来源可以编码为iOS 17.4+客户端DataJSON. 当您的 Capacitor app 运行于 capacitor://localhost 但你的依赖方期望 https://signin.example.com。 。 。 . |
force | boolean | 即使跑步时间已经暴露了 也要强迫Shim navigator.credentials默认为 false。 。 。 . |
Passkey 运行时配置
从主机的 Capacitor 配置中装入了运行时间配置 .
这是返回的形状 getConfiguration()。 。 。 .
| Prop | 类型 | 说明 |
|---|---|---|
autoShim | boolean | 无论本地人 cap sync/update 钩子应自动接通主机项目. 默认为 true。 。 。 . |
origin | string | 由配置驱动的shim安装所使用的可选 HTTPS 来源 。 在iOS 17.4+上,此来源被编码为 clientDataJSON。 。 。 . |
domains | string[] | 与密码使用应用相关的域名. 这些来自 domains 在 Capacitor 配置中加上从 origin 当可用时. |
platform | 'ios' | 'android' | 'web' | 目前运行时站台. |
通行证
JSON安全注册证书被插件返回.
| Prop | 类型 | 说明 |
|---|---|---|
id | string | Base64url - 编码证书标识符. |
rawId | string | Base64url - 编码原始证书标识符. |
type | PasskeyCredentialType | 证书类型。 永远 public-key。 。 。 . |
authenticatorAttachment | PasskeyAuthenticatorAttachment | 平台报告的可选验证器附件 . |
clientExtensionResults | Record<string, unknown> | 平台返回客户端扩展结果. |
response | PasskeyAuthenticatorAttestationResponseJSON | 登记反应有效载荷. |
密码认证器
JSON安全证明反应有效载荷.
所有二进制字段都由 Base64url 编码.
| Prop | 类型 | 说明 |
|---|---|---|
clientDataJSON | string | Base64url - 编码客户端 DataJSON. |
attestationObject | string | Base64url-编码验证对象. |
publicKey | string | 由平台提供时可选 Base64url-encode 公钥. |
publicKeyAlgorithm | number | 平台提供的可选公钥算法. |
transports | string[] | 由站台提供可选运输列表. |
authenticatorData | string | 可选基数64url-编码验证器数据. |
创建证书选项
插件运输直接注册申请.
| Prop | 类型 | 说明 |
|---|---|---|
publicKey | PasskeyPublicKeyCredentialCreationOptionsJSON | JSON安全注册申请. |
origin | string | 可选的HTTPS来源用于iOS 17.4+浏览器风格的客户端DataJSON. |
Passkey PublicKey 证书创建选项
JSON安全注册申请选项.
所有二进制字段必须被 Base64url 编码 .
| Prop | 类型 | 说明 |
|---|---|---|
challenge | string | Base64url - 编码挑战. |
rp | PasskeyRelyingParty | 赖党信息. |
user | PasskeyUserEntity | 用户信息. |
pubKeyCredParams | PasskeyCredentialParameter[] | 支持的证书算法. |
timeout | number | 以毫秒计的可选超时提示 . |
excludeCredentials | PasskeyCredentialDescriptor[] | 在登记期间必须排除的可选证书. |
authenticatorSelection | PasskeyAuthenticatorSelection | 可选的认证者偏好. |
attestation | PasskeyAttestation | 可选的证明偏好. |
hints | string[] | 从现代WebAuthn工具包使用的JSON格式复制的可选提示. |
extensions | Record<string, unknown> | 可选扩展复制为 JSON 请求 . |
密码存储方
JSON安全依赖党信息.
| Prop | 类型 | 说明 |
|---|---|---|
id | string | 依赖方识别码. 如果省略,shim在可能时会从所配置的源得到. |
name | string | 人可读取依赖党名. |
密码用户实体
JSON安全 WebAuthn 用户实体.
二进制标识符必须被 Base64url 编码 .
| Prop | 类型 | 说明 |
|---|---|---|
id | string | Base64url - 编码用户手柄. |
name | string | 认证者显示的用户名 . |
displayName | string | 可选显示名由认证者显示. |
通行证
JSON - 安全证书参数条目.
| Prop | 类型 | 说明 |
|---|---|---|
type | PasskeyCredentialType | 证书类型。 仅 public-key 被支持. |
alg | number | COSE算法标识符. |
密码键证书描述符
JSON安全地代表了公用钥匙证书的描述.
二进制标识符必须被 Base64url 编码 .
| Prop | 类型 | 说明 |
|---|---|---|
id | string | Base64url - 编码证书标识符. |
type | PasskeyCredentialType | 证书类型。 仅 public-key 被支持. |
transports | string[] | 从 WebAuthn 复制的可选传输提示 . |
密码校正器选择
JSON安全验证员选择选项.
| Prop | 类型 | 说明 |
|---|---|---|
authenticatorAttachment | PasskeyAuthenticatorAttachment | 可选验证器附件提示 . |
residentKey | PasskeyResidentKey | 可选居民关键选择. |
requireResidentKey | boolean | 遗留居民关键要求旗. |
userVerification | PasskeyUserVerification | 可选用户验证偏好. |
密码验证证书
JSON-安全认证证书被插件返回.
| Prop | 类型 | 说明 |
|---|---|---|
id | string | Base64url - 编码证书标识符. |
rawId | string | Base64url - 编码原始证书标识符. |
type | PasskeyCredentialType | 证书类型。 永远 public-key。 。 。 . |
authenticatorAttachment | PasskeyAuthenticatorAttachment | 平台报告的可选验证器附件 . |
clientExtensionResults | Record<string, unknown> | 平台返回客户端扩展结果. |
response | PasskeyAuthenticatorAssertionResponseJSON | 自动响应有效载荷. |
密码认证器
JSON安全断言反应有效载荷.
所有二进制字段都由 Base64url 编码.
| Prop | 类型 | 说明 |
|---|---|---|
clientDataJSON | string | Base64url - 编码客户端 DataJSON. |
authenticatorData | string | Base64url-编码验证器数据. |
signature | string | Base64url-编码签名. |
userHandle | string | null | 可选碱基64url-编码用户手柄. |
获取证书选项
插件传输的直接认证请求 .
| Prop | 类型 | 说明 |
|---|---|---|
publicKey | PasskeyPublicKeyCredentialRequestOptionsJSON | JSON安全认证请求. |
mediation | string | 可选的调解提示. conditional 目前回到一个明确的提示. |
origin | string | 可选的HTTPS来源用于iOS 17.4+浏览器风格的客户端DataJSON. |
preferImmediatelyAvailableCredentials | boolean | 优先存储在本地设备上,跳过混合式/相近式拾取器. 失败者 NotAllowedError 当不存在本地证书时。 在网络和iOS 15.被忽略. |
Passkey PublicKey 重要请求选项
JSON-安全认证请求选项.
所有二进制字段必须被 Base64url 编码 .
| Prop | 类型 | 说明 |
|---|---|---|
challenge | string | Base64url - 编码挑战. |
timeout | number | 以毫秒计的可选超时提示 . |
rpId | string | 可选依赖方标识符. 如果省略,shim在可能时会从所配置的源得到. |
allowCredentials | PasskeyCredentialDescriptor[] | 可选允许列表复制自 WebAuthn . |
userVerification | PasskeyUserVerification | 可选用户验证偏好. |
hints | string[] | 从现代WebAuthn工具包使用的JSON格式复制的可选提示. |
extensions | Record<string, unknown> | 可选扩展复制为 JSON 请求 . |
密码支持结果
当前运行时间的密码支持状态 .
| Prop | 类型 | 说明 |
|---|---|---|
available | boolean | 当前运行时间是否有密码可用 . |
conditionalMediation | boolean | 有无有条件的调解. |
platform | 'ios' | 'android' | 'web' | 当前平台标识符 . |
插件变压器
插件版本有效载荷 .
| Prop | 类型 | 说明 |
|---|---|---|
version | string | 目前平台实施情况报告的版本标识符. |
类型异名
Passke 证书类型
支持的 WebAuthn 证书类型 .
'public-key'
密码校正
支持认证器附件值 .
'platform' | 'cross-platform'
记录
构造 T 类型 K 的一组属性类型
{
[P in K]: T;
}
密码
支持居民关键偏好.
'discouraged' | 'preferred' | 'required'
密码用户验证
支持用户验证偏好.
'discouraged' | 'preferred' | 'required'
密码交换站
支持的证明偏好.
'none' | 'indirect' | 'direct' | 'enterprise'