{"version":1,"pages":[{"id":"JNYZLsuHuzyI7FyjKNen","title":"关于","pathname":"/","siteSpaceId":"sitesp_sfvZm"},{"id":"FjxQs89Xsf9Yyaj0vasN","title":"概述","pathname":"/getting-started/overview","siteSpaceId":"sitesp_sfvZm","description":"","breadcrumbs":[{"label":"入门"}]},{"id":"VhcA3qAQ0sKTtvGSf6zk","title":"工具","pathname":"/getting-started/tools","siteSpaceId":"sitesp_sfvZm","description":"","breadcrumbs":[{"label":"入门"}]},{"id":"3KYf6kqkWuu2mi1TzCvt","title":"服务器","pathname":"/getting-started/server","siteSpaceId":"sitesp_sfvZm","description":"","breadcrumbs":[{"label":"入门"}]},{"id":"jCYGf5956urkNGZv2kaB","title":"设置指南","pathname":"/getting-started/server/guide","siteSpaceId":"sitesp_sfvZm","description":"","breadcrumbs":[{"label":"入门"},{"label":"服务器"}]},{"id":"rC0EusMlODXYn0PDc69m","title":"高级服务器设置","pathname":"/getting-started/server/advanced-setup","siteSpaceId":"sitesp_sfvZm","breadcrumbs":[{"label":"入门"},{"label":"服务器"}]},{"id":"e5xCbj61qwELwkgjiW2F","title":"数据库","pathname":"/getting-started/server/database","siteSpaceId":"sitesp_sfvZm","breadcrumbs":[{"label":"入门"},{"label":"服务器"}]},{"id":"jE2VMtdhv3GVrAaHlz9z","title":"MSSQL","pathname":"/getting-started/server/database/mssql","siteSpaceId":"sitesp_sfvZm","description":"","breadcrumbs":[{"label":"入门"},{"label":"服务器"},{"label":"数据库"}]},{"id":"IsXm16zQbTukAEIr4ZJb","title":"实体框架","pathname":"/getting-started/server/database/ef","siteSpaceId":"sitesp_sfvZm","description":"","breadcrumbs":[{"label":"入门"},{"label":"服务器"},{"label":"数据库"}]},{"id":"HDHPMt3HTrpEbuRPNmLz","title":"事件日志","pathname":"/getting-started/server/events","siteSpaceId":"sitesp_sfvZm","description":"","breadcrumbs":[{"label":"入门"},{"label":"服务器"}]},{"id":"S4Nli62m3qNvguNbNhYe","title":"Ingress 隧道","pathname":"/getting-started/server/tunnel","siteSpaceId":"sitesp_sfvZm","breadcrumbs":[{"label":"入门"},{"label":"服务器"}]},{"id":"2DPntvueKjLZen4wf47h","title":"SCIM","pathname":"/getting-started/server/scim","siteSpaceId":"sitesp_sfvZm","breadcrumbs":[{"label":"入门"},{"label":"服务器"}]},{"id":"4f3MwJeu3dZJBfbkENo3","title":"自托管指南","pathname":"/getting-started/server/self-hosted","siteSpaceId":"sitesp_sfvZm","description":"","breadcrumbs":[{"label":"入门"},{"label":"服务器"}]},{"id":"qwXUDjOjpJkEgCv0iIAb","title":"系统管理门户","pathname":"/getting-started/server/portal","siteSpaceId":"sitesp_sfvZm","description":"","breadcrumbs":[{"label":"入门"},{"label":"服务器"}]},{"id":"cIhlkYLZCuFeGtKLE1GP","title":"单点登录 (SSO)","pathname":"/getting-started/server/sso","siteSpaceId":"sitesp_sfvZm","description":"","breadcrumbs":[{"label":"入门"},{"label":"服务器"}]},{"id":"EJ3qVYNzWpoq4voEs7oZ","title":"本地 IdP","pathname":"/getting-started/server/sso/local","siteSpaceId":"sitesp_sfvZm","description":"","breadcrumbs":[{"label":"入门"},{"label":"服务器"},{"label":"单点登录 (SSO)"}]},{"id":"ukwbMxq24NowKjPMkn3Z","title":"Okta","pathname":"/getting-started/server/sso/okta","siteSpaceId":"sitesp_sfvZm","description":"","breadcrumbs":[{"label":"入门"},{"label":"服务器"},{"label":"单点登录 (SSO)"}]},{"id":"VmO3aklKzHe39p2b0i1h","title":"故障排除","pathname":"/getting-started/server/troubleshooting","siteSpaceId":"sitesp_sfvZm","description":"","breadcrumbs":[{"label":"入门"},{"label":"服务器"}]},{"id":"mJbl04aDtBE4fHTQnehu","title":"用户机密","pathname":"/getting-started/server/secrets","siteSpaceId":"sitesp_sfvZm","description":"","breadcrumbs":[{"label":"入门"},{"label":"服务器"}]},{"id":"DxSq1YtzpO0ZP5a8AisF","title":"公共 API","pathname":"/getting-started/server/gong-gong-api","siteSpaceId":"sitesp_sfvZm","breadcrumbs":[{"label":"入门"},{"label":"服务器"}]},{"id":"us5N7QdQXJTCx46Bd5ot","title":"网页客户端","pathname":"/getting-started/clients","siteSpaceId":"sitesp_sfvZm","description":"","breadcrumbs":[{"label":"入门"}]},{"id":"iys5FDig7bXMf6lZZGgR","title":"网页密码库","pathname":"/getting-started/clients/web-vault","siteSpaceId":"sitesp_sfvZm","description":"","breadcrumbs":[{"label":"入门"},{"label":"网页客户端"}]},{"id":"LX1GCIc1GhcxFHGBJMNS","title":"WebAuthn","pathname":"/getting-started/clients/web-vault/webauthn","siteSpaceId":"sitesp_sfvZm","description":"","breadcrumbs":[{"label":"入门"},{"label":"网页客户端"},{"label":"网页密码库"}]},{"id":"IavXNvAo71llS6bgDhsg","title":"浏览器端","pathname":"/getting-started/clients/browser","siteSpaceId":"sitesp_sfvZm","description":"","breadcrumbs":[{"label":"入门"},{"label":"网页客户端"}]},{"id":"iLkbP7nxTjI5JkPPtIX5","title":"生物识别解锁","pathname":"/getting-started/clients/browser/biometric","siteSpaceId":"sitesp_sfvZm","description":"","breadcrumbs":[{"label":"入门"},{"label":"网页客户端"},{"label":"浏览器端"}]},{"id":"W9bm4rC25DfooxkJlIyU","title":"Firefox 隐私模式","pathname":"/getting-started/clients/browser/ff-private","siteSpaceId":"sitesp_sfvZm","description":"","breadcrumbs":[{"label":"入门"},{"label":"网页客户端"},{"label":"浏览器端"}]},{"id":"JGAfc25RgGCltsiEOog4","title":"桌面端","pathname":"/getting-started/clients/desktop","siteSpaceId":"sitesp_sfvZm","description":"","breadcrumbs":[{"label":"入门"},{"label":"网页客户端"}]},{"id":"vNd4rihjZk2POa0xDTBf","title":"Mac App Store Dev","pathname":"/getting-started/clients/desktop/mac","siteSpaceId":"sitesp_sfvZm","description":"","breadcrumbs":[{"label":"入门"},{"label":"网页客户端"},{"label":"桌面端"}]},{"id":"2G52orTwsJDvHpE825SU","title":"Microsoft Store","pathname":"/getting-started/clients/desktop/microsoft-store","siteSpaceId":"sitesp_sfvZm","description":"","breadcrumbs":[{"label":"入门"},{"label":"网页客户端"},{"label":"桌面端"}]},{"id":"b0AzTMeL0l86WRAcnuST","title":"Native Messaging Test Runner","pathname":"/getting-started/clients/desktop/native-messaging-test-runner","siteSpaceId":"sitesp_sfvZm","description":"","breadcrumbs":[{"label":"入门"},{"label":"网页客户端"},{"label":"桌面端"}]},{"id":"OSUufXsm2dWmEkDs3hPo","title":"更新测试","pathname":"/getting-started/clients/desktop/update","siteSpaceId":"sitesp_sfvZm","description":"","breadcrumbs":[{"label":"入门"},{"label":"网页客户端"},{"label":"桌面端"}]},{"id":"CO4I3kER37sI4eczZwc1","title":"CLI","pathname":"/getting-started/clients/cli","siteSpaceId":"sitesp_sfvZm","description":"","breadcrumbs":[{"label":"入门"},{"label":"网页客户端"}]},{"id":"BndvEoAiVPpGqWRJE3xx","title":"故障排除","pathname":"/getting-started/clients/troubleshooting","siteSpaceId":"sitesp_sfvZm","description":"","breadcrumbs":[{"label":"入门"},{"label":"网页客户端"}]},{"id":"pGffyEClTxeyX124EGMw","title":"移动端","pathname":"/getting-started/mobile","siteSpaceId":"sitesp_sfvZm","description":"","breadcrumbs":[{"label":"入门"}]},{"id":"n6aSZtnr1Hfp30ohBNn4","title":"Android","pathname":"/getting-started/mobile/android","siteSpaceId":"sitesp_sfvZm","breadcrumbs":[{"label":"入门"},{"label":"移动端"}]},{"id":"AY3ayArpSnGABPPO83aU","title":"F-Droid","pathname":"/getting-started/mobile/android/f-droid","siteSpaceId":"sitesp_sfvZm","breadcrumbs":[{"label":"入门"},{"label":"移动端"},{"label":"Android"}]},{"id":"lj2HLdUwzEmhthV4jARv","title":"iOS","pathname":"/getting-started/mobile/ios","siteSpaceId":"sitesp_sfvZm","breadcrumbs":[{"label":"入门"},{"label":"移动端"}]},{"id":"QYLsS7OMjKgZzVjBRdhW","title":".NET MAUI (legacy)","pathname":"/getting-started/mobile/net-maui-legacy","siteSpaceId":"sitesp_sfvZm","breadcrumbs":[{"label":"入门"},{"label":"移动端"}]},{"id":"NOvQDfKhnN7uDk4QKF1Y","title":"Android","pathname":"/getting-started/mobile/net-maui-legacy/android","siteSpaceId":"sitesp_sfvZm","description":"","breadcrumbs":[{"label":"入门"},{"label":"移动端"},{"label":".NET MAUI (legacy)"}]},{"id":"OvimgEcICLi1PxXOaFCZ","title":"iOS","pathname":"/getting-started/mobile/net-maui-legacy/ios","siteSpaceId":"sitesp_sfvZm","description":"","breadcrumbs":[{"label":"入门"},{"label":"移动端"},{"label":".NET MAUI (legacy)"}]},{"id":"FbVHj3JC7UXXLOiz6Orz","title":"watchOS","pathname":"/getting-started/mobile/net-maui-legacy/watchos","siteSpaceId":"sitesp_sfvZm","breadcrumbs":[{"label":"入门"},{"label":"移动端"},{"label":".NET MAUI (legacy)"}]},{"id":"7MXCB5Lyy4ZiwenvAqJA","title":"SDK","pathname":"/getting-started/sdk","siteSpaceId":"sitesp_sfvZm","breadcrumbs":[{"label":"入门"}]},{"id":"cEaLkI1cE2C3p2iAecy6","title":"内部 SDK","pathname":"/getting-started/sdk/internal-sdk","siteSpaceId":"sitesp_sfvZm","breadcrumbs":[{"label":"入门"},{"label":"SDK"}]},{"id":"k0QYaMoZUmLhssdoRChR","title":"Secrets Manager","pathname":"/getting-started/sdk/secrets-manager","siteSpaceId":"sitesp_sfvZm","breadcrumbs":[{"label":"入门"},{"label":"SDK"}]},{"id":"nJVirbO9RBfXS2OFimo6","title":"Integrations","pathname":"/getting-started/sdk/secrets-manager/integrations","siteSpaceId":"sitesp_sfvZm","breadcrumbs":[{"label":"入门"},{"label":"SDK"},{"label":"Secrets Manager"}]},{"id":"JbQ3CnqrCN0XtVfr9CJp","title":"Kubernetes","pathname":"/getting-started/sdk/secrets-manager/integrations/kubernetes","siteSpaceId":"sitesp_sfvZm","breadcrumbs":[{"label":"入门"},{"label":"SDK"},{"label":"Secrets Manager"},{"label":"Integrations"}]},{"id":"Y2MJzV01HGMGhk9TakW4","title":"业务 App","pathname":"/getting-started/business","siteSpaceId":"sitesp_sfvZm","description":"","breadcrumbs":[{"label":"入门"}]},{"id":"P8g66uvaKlgpW3CDU5Mv","title":"目录连接器","pathname":"/getting-started/business/directory-connector","siteSpaceId":"sitesp_sfvZm","description":"","breadcrumbs":[{"label":"入门"},{"label":"业务 App"}]},{"id":"fJ82Oi3RcSotyb1omM34","title":"JumpCloud","pathname":"/getting-started/business/directory-connector/jumpcloud","siteSpaceId":"sitesp_sfvZm","description":"","breadcrumbs":[{"label":"入门"},{"label":"业务 App"},{"label":"目录连接器"}]},{"id":"JZ5twejSIOO1xRocq8CX","title":"OpenLDAP Docker 服务器","pathname":"/getting-started/business/directory-connector/open-ldap","siteSpaceId":"sitesp_sfvZm","description":"","breadcrumbs":[{"label":"入门"},{"label":"业务 App"},{"label":"目录连接器"}]},{"id":"3ImUY79BZGMUM5hYgnDS","title":"Key Connector","pathname":"/getting-started/business/key-connector","siteSpaceId":"sitesp_sfvZm","description":"","breadcrumbs":[{"label":"入门"},{"label":"业务 App"}]},{"id":"KaYagwYGfXdI1VUlSG3M","title":"Splunk App","pathname":"/getting-started/business/splunk-app","siteSpaceId":"sitesp_sfvZm","breadcrumbs":[{"label":"入门"},{"label":"业务 App"}]},{"id":"eDwxuAF0QM6Gm97PNqlk","title":"贡献","pathname":"/contributing/contributing","siteSpaceId":"sitesp_sfvZm","description":"","breadcrumbs":[{"label":"贡献"}]},{"id":"tsqQuX9yS69ZIt0sZTj1","title":"代码样式","pathname":"/contributing/code-style","siteSpaceId":"sitesp_sfvZm","description":"","breadcrumbs":[{"label":"贡献"}]},{"id":"BWacOrLTRwf6EsOYrAMR","title":"=Android & Kotlin","pathname":"/contributing/code-style/android-and-kotlin","siteSpaceId":"sitesp_sfvZm","breadcrumbs":[{"label":"贡献"},{"label":"代码样式"}]},{"id":"kv043ytWTR0LhWkQZIBx","title":"Angular & TypeScript","pathname":"/contributing/code-style/angular","siteSpaceId":"sitesp_sfvZm","description":"","breadcrumbs":[{"label":"贡献"},{"label":"代码样式"}]},{"id":"LuLKpIuIPSrhBi0UYJB7","title":"C#","pathname":"/contributing/code-style/csharp","siteSpaceId":"sitesp_sfvZm","description":"","breadcrumbs":[{"label":"贡献"},{"label":"代码样式"}]},{"id":"MmZtLNtlSz3AFVS5866t","title":"=Rust","pathname":"/contributing/code-style/rust","siteSpaceId":"sitesp_sfvZm","breadcrumbs":[{"label":"贡献"},{"label":"代码样式"}]},{"id":"e281tkFZPGSs8H9ekFfP","title":"T-SQL","pathname":"/contributing/code-style/t-sql","siteSpaceId":"sitesp_sfvZm","description":"","breadcrumbs":[{"label":"贡献"},{"label":"代码样式"}]},{"id":"ZEKZ7PojcL1eDuHO4s9a","title":"=Swift","pathname":"/contributing/code-style/swift","siteSpaceId":"sitesp_sfvZm","breadcrumbs":[{"label":"贡献"},{"label":"代码样式"}]},{"id":"EY3ggyJUYRoOpoB9H6CV","title":"Tailwind","pathname":"/contributing/code-style/tailwind","siteSpaceId":"sitesp_sfvZm","description":"","breadcrumbs":[{"label":"贡献"},{"label":"代码样式"}]},{"id":"D7QE2LwbrQbmF96XQvQv","title":"数据库迁移","pathname":"/contributing/database-migrations","siteSpaceId":"sitesp_sfvZm","breadcrumbs":[{"label":"贡献"}]},{"id":"6zbJkkzbzwmfEEefddrs","title":"进化数据库设计","pathname":"/contributing/database-migrations/edd","siteSpaceId":"sitesp_sfvZm","description":"","breadcrumbs":[{"label":"贡献"},{"label":"数据库迁移"}]},{"id":"9St4uMUXk7HMgLb9hZCq","title":"提交签名","pathname":"/contributing/commit-signing","siteSpaceId":"sitesp_sfvZm","description":"","breadcrumbs":[{"label":"贡献"}]},{"id":"KzhRsOdu2ZCo7hQT9gq6","title":"拉取请求","pathname":"/contributing/pull-requests","siteSpaceId":"sitesp_sfvZm","breadcrumbs":[{"label":"贡献"}]},{"id":"pHQm7CbTNNQa0y3xRBBC","title":"=贡献审查程序","pathname":"/contributing/pull-requests/contribution-review-process","siteSpaceId":"sitesp_sfvZm","breadcrumbs":[{"label":"贡献"},{"label":"拉取请求"}]},{"id":"K31gBs0AQoGKxoPX4zIx","title":"分支","pathname":"/contributing/pull-requests/branching","siteSpaceId":"sitesp_sfvZm","breadcrumbs":[{"label":"贡献"},{"label":"拉取请求"}]},{"id":"wk8InuFGJqRZ2s4NwkTt","title":"代码审查","pathname":"/contributing/pull-requests/code-review","siteSpaceId":"sitesp_sfvZm","breadcrumbs":[{"label":"贡献"},{"label":"拉取请求"}]},{"id":"Mj71wOynFbt1NeVEqXxe","title":"UI 审查 - Chromatic","pathname":"/contributing/pull-requests/chromatic","siteSpaceId":"sitesp_sfvZm","breadcrumbs":[{"label":"贡献"},{"label":"拉取请求"}]},{"id":"O3gPCnkgP0VtQ2gkXNA3","title":"无障碍","pathname":"/contributing/accessibility","siteSpaceId":"sitesp_sfvZm","breadcrumbs":[{"label":"贡献"}]},{"id":"wtFFGhArdFWzjRxgdxph","title":"依赖管理","pathname":"/contributing/dependencies","siteSpaceId":"sitesp_sfvZm","breadcrumbs":[{"label":"贡献"}]},{"id":"x2PcgzmZzr0LUmRqdkMF","title":"功能标记","pathname":"/contributing/feature-flags","siteSpaceId":"sitesp_sfvZm","breadcrumbs":[{"label":"贡献"}]},{"id":"qe71BQAMpvlNvfAfosGB","title":"模板存储库","pathname":"/contributing/template-repository","siteSpaceId":"sitesp_sfvZm","breadcrumbs":[{"label":"贡献"}]},{"id":"liUV2t2wglLkzVNiYiun","title":"测试","pathname":"/contributing/testing","siteSpaceId":"sitesp_sfvZm","breadcrumbs":[{"label":"贡献"}]},{"id":"yaS33N9Rl5gdamPnWATw","title":"=数据库集成测试","pathname":"/contributing/testing/database","siteSpaceId":"sitesp_sfvZm","breadcrumbs":[{"label":"贡献"},{"label":"测试"}]},{"id":"koVEya9kVLv2Sd5pXCFy","title":"负载测试","pathname":"/contributing/testing/load","siteSpaceId":"sitesp_sfvZm","breadcrumbs":[{"label":"贡献"},{"label":"测试"}]},{"id":"AdYeUkfVKlU0rx4tQV8Z","title":"单元测试","pathname":"/contributing/testing/unit","siteSpaceId":"sitesp_sfvZm","breadcrumbs":[{"label":"贡献"},{"label":"测试"}]},{"id":"ooX3as0ZmNkvr55WNxd7","title":"命名约定","pathname":"/contributing/testing/unit/naming-conventions","siteSpaceId":"sitesp_sfvZm","breadcrumbs":[{"label":"贡献"},{"label":"测试"},{"label":"单元测试"}]},{"id":"DE2ykpdgZmHk3mTPf3ca","title":"测试结构","pathname":"/contributing/testing/unit/structure","siteSpaceId":"sitesp_sfvZm","breadcrumbs":[{"label":"贡献"},{"label":"测试"},{"label":"单元测试"}]},{"id":"gGx4ONxD07qBkIuV8pqm","title":"修改用户机密","pathname":"/contributing/user-secrets","siteSpaceId":"sitesp_sfvZm","description":"","breadcrumbs":[{"label":"贡献"}]},{"id":"AS6qZGnDtlVw66zQQm0E","title":"架构","pathname":"/architecture/architecture","siteSpaceId":"sitesp_sfvZm","description":"","breadcrumbs":[{"label":"架构"}]},{"id":"Ul6sNFbGAuaRSgkavNxL","title":"架构决策记录 (ADR)","pathname":"/architecture/adr","siteSpaceId":"sitesp_sfvZm","description":"","breadcrumbs":[{"label":"架构"}]},{"id":"CdrEfaxUzlN1ULejuCEO","title":"0001 - Angular Reactive Forms","pathname":"/architecture/adr/0001-angular-reactive-forms","siteSpaceId":"sitesp_sfvZm","description":"","breadcrumbs":[{"label":"架构"},{"label":"架构决策记录 (ADR)"}]},{"id":"fRixFKGMgN5KdHNSkY97","title":"0002 - Public API for modules","pathname":"/architecture/adr/0002-public-api-for-modules","siteSpaceId":"sitesp_sfvZm","description":"","breadcrumbs":[{"label":"架构"},{"label":"架构决策记录 (ADR)"}]},{"id":"qfn2TE4r6GQc2IrypuC6","title":"0003 - Adopt Observable Data Services for Angular","pathname":"/architecture/adr/0003-adopt-observable-data-services-for-angular","siteSpaceId":"sitesp_sfvZm","description":"","breadcrumbs":[{"label":"架构"},{"label":"架构决策记录 (ADR)"}]},{"id":"XHcRhzUHXxSA7KVhrQEX","title":"0004 - Refactor State Service","pathname":"/architecture/adr/0004-refactor-state-service","siteSpaceId":"sitesp_sfvZm","description":"","breadcrumbs":[{"label":"架构"},{"label":"架构决策记录 (ADR)"}]},{"id":"E4Gt3niMCNXFDAPPZTAs","title":"0005 - Refactor Api Service","pathname":"/architecture/adr/0005-refactor-api-service","siteSpaceId":"sitesp_sfvZm","description":"","breadcrumbs":[{"label":"架构"},{"label":"架构决策记录 (ADR)"}]},{"id":"aOhqXBvw1Lm2nYSXr0MT","title":"0006 - Clients: Use Jest Mocks","pathname":"/architecture/adr/0006-clients-use-jest-mocks","siteSpaceId":"sitesp_sfvZm","description":"","breadcrumbs":[{"label":"架构"},{"label":"架构决策记录 (ADR)"}]},{"id":"2elDdKbGQRlDKGXI5Y5s","title":"0007 - Manifest V3 sync Observables","pathname":"/architecture/adr/0007-manifest-v3-sync-observables","siteSpaceId":"sitesp_sfvZm","description":"","breadcrumbs":[{"label":"架构"},{"label":"架构决策记录 (ADR)"}]},{"id":"eDK3SCtNQgkNrSHwNFov","title":"0008 - Server: Adopt CQRS","pathname":"/architecture/adr/0008-server-adopt-cqrs","siteSpaceId":"sitesp_sfvZm","description":"","breadcrumbs":[{"label":"架构"},{"label":"架构决策记录 (ADR)"}]},{"id":"SqEv5519euJ6PY9zgUq9","title":"0009 - Composition over inheritance","pathname":"/architecture/adr/0009-composition-over-inheritance","siteSpaceId":"sitesp_sfvZm","description":"","breadcrumbs":[{"label":"架构"},{"label":"架构决策记录 (ADR)"}]},{"id":"eSaCaWrYeualjpa8btRH","title":"0010 - Angular Modules","pathname":"/architecture/adr/0010-angular-modules","siteSpaceId":"sitesp_sfvZm","description":"","breadcrumbs":[{"label":"架构"},{"label":"架构决策记录 (ADR)"}]},{"id":"3kc1BW3XGWad149gk7Cj","title":"0011 - Scalable Angular Clients folder structure","pathname":"/architecture/adr/0011-scalable-angular-clients-folder-structure","siteSpaceId":"sitesp_sfvZm","description":"","breadcrumbs":[{"label":"架构"},{"label":"架构决策记录 (ADR)"}]},{"id":"vkYaHQSDEiUeveRdQUe3","title":"0012 - Angular Filename convention","pathname":"/architecture/adr/0012-angular-filename-convention","siteSpaceId":"sitesp_sfvZm","description":"","breadcrumbs":[{"label":"架构"},{"label":"架构决策记录 (ADR)"}]},{"id":"y1AbjH7oEaxAHvQm1eyl","title":"0013 - Avoid layered folder structure for request/response models","pathname":"/architecture/adr/0013-avoid-layered-folder-structure-for-request-response-models","siteSpaceId":"sitesp_sfvZm","description":"","breadcrumbs":[{"label":"架构"},{"label":"架构决策记录 (ADR)"}]},{"id":"D7IoHtuD2Ob1zNp5VTa9","title":"0014 - Adopt Typescript Strict flag","pathname":"/architecture/adr/0014-adopt-typescript-strict-flag","siteSpaceId":"sitesp_sfvZm","description":"","breadcrumbs":[{"label":"架构"},{"label":"架构决策记录 (ADR)"}]},{"id":"YwaQCWudc87xQExIogcZ","title":"0015 - Short Lived Browser Services","pathname":"/architecture/adr/0015-short-lived-browser-services","siteSpaceId":"sitesp_sfvZm","breadcrumbs":[{"label":"架构"},{"label":"架构决策记录 (ADR)"}]},{"id":"V2P4K07QxZ4FHxA19hWe","title":"0016 - Move Decryption and Encryption to Views","pathname":"/architecture/adr/0016-move-decryption-and-encryption-to-views","siteSpaceId":"sitesp_sfvZm","breadcrumbs":[{"label":"架构"},{"label":"架构决策记录 (ADR)"}]},{"id":"LkcdeFCpXa7D0lec4h6j","title":"0017 - Use Swift to build watchOS app","pathname":"/architecture/adr/0017-use-swift-to-build-watchos-app","siteSpaceId":"sitesp_sfvZm","breadcrumbs":[{"label":"架构"},{"label":"架构决策记录 (ADR)"}]},{"id":"Mav7TqfQbZWvlGAFRVBK","title":"0018 - Feature management","pathname":"/architecture/adr/0018-feature-management","siteSpaceId":"sitesp_sfvZm","breadcrumbs":[{"label":"架构"},{"label":"架构决策记录 (ADR)"}]},{"id":"63zO9V0qUV9SHLisxmkd","title":"0019 - Adoption of Web Push","pathname":"/architecture/adr/0019-adoption-of-web-push","siteSpaceId":"sitesp_sfvZm","breadcrumbs":[{"label":"架构"},{"label":"架构决策记录 (ADR)"}]},{"id":"ceccgiHSHU10egflR3xo","title":"0020 - Observability with OpenTelemetry","pathname":"/architecture/adr/0020-observability-with-opentelemetry","siteSpaceId":"sitesp_sfvZm","breadcrumbs":[{"label":"架构"},{"label":"架构决策记录 (ADR)"}]},{"id":"joTT0g9UoncKXQzKib7T","title":"0021 - Logging to Standard Output","pathname":"/architecture/adr/0021-logging-to-standard-output","siteSpaceId":"sitesp_sfvZm","breadcrumbs":[{"label":"架构"},{"label":"架构决策记录 (ADR)"}]},{"id":"91fkpKHhkcyXxdhRZqQo","title":"=0022 - Authorization","pathname":"/architecture/adr/server-authorization","siteSpaceId":"sitesp_sfvZm","breadcrumbs":[{"label":"架构"},{"label":"架构决策记录 (ADR)"}]},{"id":"SWnpXWrVhPk9imwST1TP","title":"=0023 - Identifying Integrated Clients","pathname":"/architecture/adr/integration-identifiers","siteSpaceId":"sitesp_sfvZm","breadcrumbs":[{"label":"架构"},{"label":"架构决策记录 (ADR)"}]},{"id":"ItTaOKwjso8PydNfnAaD","title":"移动客户端架构","pathname":"/architecture/mobile-clients","siteSpaceId":"sitesp_sfvZm","breadcrumbs":[{"label":"架构"}]},{"id":"PFA4y7gibaShiAFRx2oK","title":"=Android","pathname":"/architecture/mobile-clients/android","siteSpaceId":"sitesp_sfvZm","breadcrumbs":[{"label":"架构"},{"label":"移动客户端架构"}]},{"id":"mtqa4ph1x72M7ssKjA8W","title":"=iOS","pathname":"/architecture/mobile-clients/ios","siteSpaceId":"sitesp_sfvZm","breadcrumbs":[{"label":"架构"},{"label":"移动客户端架构"}]},{"id":"fUteCICHY9jIwOUXjRg3","title":"=推送通知故障排除提示","pathname":"/architecture/mobile-clients/ios/push-notification-troubleshooting","siteSpaceId":"sitesp_sfvZm","breadcrumbs":[{"label":"架构"},{"label":"移动客户端架构"},{"label":"=iOS"}]},{"id":"jVaVowQYpu7PwH5rWQ8s","title":"=.NET MAUI (legacy)","pathname":"/architecture/mobile-clients/net-maui-legacy","siteSpaceId":"sitesp_sfvZm","breadcrumbs":[{"label":"架构"},{"label":"移动客户端架构"}]},{"id":"1V6WOc9fNgEfG6WQPY4m","title":"=概述","pathname":"/architecture/mobile-clients/net-maui-legacy/overview","siteSpaceId":"sitesp_sfvZm","breadcrumbs":[{"label":"架构"},{"label":"移动客户端架构"},{"label":"=.NET MAUI (legacy)"}]},{"id":"Z0PB3B6ynZVsXAlo895P","title":"watchOS","pathname":"/architecture/mobile-clients/net-maui-legacy/watchos","siteSpaceId":"sitesp_sfvZm","breadcrumbs":[{"label":"架构"},{"label":"移动客户端架构"},{"label":"=.NET MAUI (legacy)"}]},{"id":"51hPsfG8vD6LAf2ldzf8","title":"=SDK 架构","pathname":"/architecture/sdk","siteSpaceId":"sitesp_sfvZm","breadcrumbs":[{"label":"架构"}]},{"id":"nicGUfeeGkj5JFEjXs33","title":"=数据模型","pathname":"/architecture/sdk/data-models","siteSpaceId":"sitesp_sfvZm","breadcrumbs":[{"label":"架构"},{"label":"=SDK 架构"}]},{"id":"xCVIb8jIcyl18tVajYBF","title":"=依赖","pathname":"/architecture/sdk/dependencies","siteSpaceId":"sitesp_sfvZm","breadcrumbs":[{"label":"架构"},{"label":"=SDK 架构"}]},{"id":"BKm1jVykBtrunWewuNat","title":"Password Manager","pathname":"/architecture/sdk/password-manager","siteSpaceId":"sitesp_sfvZm","breadcrumbs":[{"label":"架构"},{"label":"=SDK 架构"}]},{"id":"3AKQJNF4pGiOLO7cCIRp","title":"Web","pathname":"/architecture/sdk/password-manager/web","siteSpaceId":"sitesp_sfvZm","breadcrumbs":[{"label":"架构"},{"label":"=SDK 架构"},{"label":"Password Manager"}]},{"id":"n122BlbB7GC9Y1vuostI","title":"=互操作性","pathname":"/architecture/sdk/password-manager/web/interoperability","siteSpaceId":"sitesp_sfvZm","breadcrumbs":[{"label":"架构"},{"label":"=SDK 架构"},{"label":"Password Manager"},{"label":"Web"}]},{"id":"74gJYRHp3uwFnnlX7gO7","title":"=Secrets Manager","pathname":"/architecture/sdk/secrets-manager","siteSpaceId":"sitesp_sfvZm","breadcrumbs":[{"label":"架构"},{"label":"=SDK 架构"}]},{"id":"jIXVGe7HOlFT2Tc07Yiw","title":"=服务器绑定","pathname":"/architecture/sdk/server-bindings","siteSpaceId":"sitesp_sfvZm","breadcrumbs":[{"label":"架构"},{"label":"=SDK 架构"}]},{"id":"USodNjdCJQRrEa5oZIsG","title":"=版本控制和破坏性更改","pathname":"/architecture/sdk/versioning","siteSpaceId":"sitesp_sfvZm","breadcrumbs":[{"label":"架构"},{"label":"=SDK 架构"}]},{"id":"SmJQuZqqU5EJgpqVr0RL","title":"网络客户端架构","pathname":"/architecture/clients","siteSpaceId":"sitesp_sfvZm","description":"","breadcrumbs":[{"label":"架构"}]},{"id":"ddBCB5bjlGvoyDgvBFBx","title":"概述","pathname":"/architecture/clients/overview","siteSpaceId":"sitesp_sfvZm","description":"","breadcrumbs":[{"label":"架构"},{"label":"网络客户端架构"}]},{"id":"3XhjnGOrDKkV7opeGu0q","title":"数据模型","pathname":"/architecture/clients/data-model","siteSpaceId":"sitesp_sfvZm","description":"","breadcrumbs":[{"label":"架构"},{"label":"网络客户端架构"}]},{"id":"JWKgKLO6n2sMz8ovA5Da","title":"表示层","pathname":"/architecture/clients/presentation","siteSpaceId":"sitesp_sfvZm","description":"","breadcrumbs":[{"label":"架构"},{"label":"网络客户端架构"}]},{"id":"tIVTAlAeQ5dib9GqmktC","title":"Angular","pathname":"/architecture/clients/presentation/angular","siteSpaceId":"sitesp_sfvZm","description":"","breadcrumbs":[{"label":"架构"},{"label":"网络客户端架构"},{"label":"表示层"}]},{"id":"xYL1BkEaPlT64mSp6n4n","title":"CLI","pathname":"/architecture/clients/presentation/cli","siteSpaceId":"sitesp_sfvZm","description":"","breadcrumbs":[{"label":"架构"},{"label":"网络客户端架构"},{"label":"表示层"}]},{"id":"Ev4RPXcIw7FgTwgjZKXC","title":"=依赖注入","pathname":"/architecture/clients/dependency-injection","siteSpaceId":"sitesp_sfvZm","breadcrumbs":[{"label":"架构"},{"label":"网络客户端架构"}]},{"id":"bScwhlycTqG4zfHjDy8i","title":"服务层","pathname":"/architecture/clients/services","siteSpaceId":"sitesp_sfvZm","breadcrumbs":[{"label":"架构"},{"label":"网络客户端架构"}]},{"id":"S2VPe65otkVR4BsB35iC","title":"Vision","pathname":"/architecture/clients/services/vision","siteSpaceId":"sitesp_sfvZm","breadcrumbs":[{"label":"架构"},{"label":"网络客户端架构"},{"label":"服务层"}]},{"id":"8bQB9MRgquZr8j5HNYUM","title":"实现","pathname":"/architecture/clients/services/implementation","siteSpaceId":"sitesp_sfvZm","breadcrumbs":[{"label":"架构"},{"label":"网络客户端架构"},{"label":"服务层"}]},{"id":"NzSgdJUXkTq921H9IG4X","title":"服务器架构","pathname":"/architecture/server","siteSpaceId":"sitesp_sfvZm","breadcrumbs":[{"label":"架构"}]},{"id":"Rb1ZJojBAOq64AluhruV","title":"深度剖析","pathname":"/architecture/deep-dives","siteSpaceId":"sitesp_sfvZm","breadcrumbs":[{"label":"架构"}]},{"id":"1e6sJ3Sd1IQsZUbZhSAa","title":"身份验证","pathname":"/architecture/deep-dives/authentication","siteSpaceId":"sitesp_sfvZm","breadcrumbs":[{"label":"架构"},{"label":"深度剖析"}]},{"id":"N5Do1pBZB2MqY4A4KjJx","title":"双重身份验证","pathname":"/architecture/deep-dives/authentication/two-factor-auth","siteSpaceId":"sitesp_sfvZm","breadcrumbs":[{"label":"架构"},{"label":"深度剖析"},{"label":"身份验证"}]},{"id":"2PoGywc5N8MRuc4lThEh","title":"=授权","pathname":"/architecture/deep-dives/authorization","siteSpaceId":"sitesp_sfvZm","breadcrumbs":[{"label":"架构"},{"label":"深度剖析"}]},{"id":"zrmpor8S2r9np2tmUlWm","title":"=浏览器自动填充","pathname":"/architecture/deep-dives/autofill","siteSpaceId":"sitesp_sfvZm","breadcrumbs":[{"label":"架构"},{"label":"深度剖析"}]},{"id":"NnZWpsI6Qcei6IuGRufr","title":"收集页面详细信息","pathname":"/architecture/deep-dives/autofill/collecting-page-details","siteSpaceId":"sitesp_sfvZm","breadcrumbs":[{"label":"架构"},{"label":"深度剖析"},{"label":"=浏览器自动填充"}]},{"id":"bQ9H6Xvauu7pWEEi0W4f","title":"生成并执行填充脚本","pathname":"/architecture/deep-dives/autofill/generating-fill-scripts","siteSpaceId":"sitesp_sfvZm","breadcrumbs":[{"label":"架构"},{"label":"深度剖析"},{"label":"=浏览器自动填充"}]},{"id":"NtFRHusyFaDYHyDPQav8","title":"表单提交检测","pathname":"/architecture/deep-dives/autofill/form-submission-detection","siteSpaceId":"sitesp_sfvZm","breadcrumbs":[{"label":"架构"},{"label":"深度剖析"},{"label":"=浏览器自动填充"}]},{"id":"cSPA7FMbKhBmPJVgyO2x","title":"Shadow DOM","pathname":"/architecture/deep-dives/autofill/shadow-dom","siteSpaceId":"sitesp_sfvZm","breadcrumbs":[{"label":"架构"},{"label":"深度剖析"},{"label":"=浏览器自动填充"}]},{"id":"yOFB9E0qkgTYxqg8mPd7","title":"=内联自动填充菜单","pathname":"/architecture/deep-dives/autofill/autofill-menu","siteSpaceId":"sitesp_sfvZm","breadcrumbs":[{"label":"架构"},{"label":"深度剖析"},{"label":"=浏览器自动填充"}]},{"id":"wbjlYMjUp7XZibzVW1jM","title":"Captcha","pathname":"/architecture/deep-dives/captchas","siteSpaceId":"sitesp_sfvZm","breadcrumbs":[{"label":"架构"},{"label":"深度剖析"}]},{"id":"kTeeOvCc23okHcOj2pXw","title":"=只读数据库副本","pathname":"/architecture/deep-dives/database-replicas","siteSpaceId":"sitesp_sfvZm","breadcrumbs":[{"label":"架构"},{"label":"深度剖析"}]},{"id":"rcNoP2Dipyw65iUN626Z","title":"事件日志","pathname":"/architecture/deep-dives/event-logs","siteSpaceId":"sitesp_sfvZm","breadcrumbs":[{"label":"架构"},{"label":"深度剖析"}]},{"id":"RytlNs1Zr0eYzD0EdbNz","title":"=FIDO2 和通行密钥","pathname":"/architecture/deep-dives/passkeys","siteSpaceId":"sitesp_sfvZm","breadcrumbs":[{"label":"架构"},{"label":"深度剖析"}]},{"id":"Sx9Rqq9ooYAiZpN27hAN","title":"=凭据","pathname":"/architecture/deep-dives/passkeys/credentials","siteSpaceId":"sitesp_sfvZm","breadcrumbs":[{"label":"架构"},{"label":"深度剖析"},{"label":"=FIDO2 和通行密钥"}]},{"id":"4N83T7BYxNO84jYc47PM","title":"=操作","pathname":"/architecture/deep-dives/passkeys/operations","siteSpaceId":"sitesp_sfvZm","breadcrumbs":[{"label":"架构"},{"label":"深度剖析"},{"label":"=FIDO2 和通行密钥"}]},{"id":"sBwVeMD1mDHe9Bj0b5jk","title":"=命名惯例","pathname":"/architecture/deep-dives/passkeys/naming-convention","siteSpaceId":"sitesp_sfvZm","breadcrumbs":[{"label":"架构"},{"label":"深度剖析"},{"label":"=FIDO2 和通行密钥"}]},{"id":"BY6Dzl7YktgnOlb64dfw","title":"=实现","pathname":"/architecture/deep-dives/passkeys/implementations","siteSpaceId":"sitesp_sfvZm","breadcrumbs":[{"label":"架构"},{"label":"深度剖析"},{"label":"=FIDO2 和通行密钥"}]},{"id":"8jrRmpExupEImneDM9hZ","title":"=提供程序","pathname":"/architecture/deep-dives/passkeys/implementations/provider","siteSpaceId":"sitesp_sfvZm","breadcrumbs":[{"label":"架构"},{"label":"深度剖析"},{"label":"=FIDO2 和通行密钥"},{"label":"=实现"}]},{"id":"jS6QkOr1qILqUHhGNb3K","title":"=浏览器扩展","pathname":"/architecture/deep-dives/passkeys/implementations/provider/browser-extension","siteSpaceId":"sitesp_sfvZm","breadcrumbs":[{"label":"架构"},{"label":"深度剖析"},{"label":"=FIDO2 和通行密钥"},{"label":"=实现"},{"label":"=提供程序"}]},{"id":"y2SI3E3vcPGlnAatUajp","title":"=依赖方","pathname":"/architecture/deep-dives/passkeys/implementations/relying-party","siteSpaceId":"sitesp_sfvZm","breadcrumbs":[{"label":"架构"},{"label":"深度剖析"},{"label":"=FIDO2 和通行密钥"},{"label":"=实现"}]},{"id":"eMWP77oTRKmIYotyBRDu","title":"=用于解密的通行密钥","pathname":"/architecture/deep-dives/passkeys/implementations/relying-party/prf","siteSpaceId":"sitesp_sfvZm","breadcrumbs":[{"label":"架构"},{"label":"深度剖析"},{"label":"=FIDO2 和通行密钥"},{"label":"=实现"},{"label":"=依赖方"}]},{"id":"dTv8JRM0Y8yAf9LMStim","title":"=术语表","pathname":"/architecture/deep-dives/passkeys/glossary","siteSpaceId":"sitesp_sfvZm","breadcrumbs":[{"label":"架构"},{"label":"深度剖析"},{"label":"=FIDO2 和通行密钥"}]},{"id":"IiL8rhvMoXIJwYRWPxxz","title":"推送通知","pathname":"/architecture/deep-dives/push-notifications","siteSpaceId":"sitesp_sfvZm","breadcrumbs":[{"label":"架构"},{"label":"深度剖析"}]},{"id":"MnozIJVpOEWcVQa5mIIj","title":"移动端推送通知","pathname":"/architecture/deep-dives/push-notifications/mobile","siteSpaceId":"sitesp_sfvZm","breadcrumbs":[{"label":"架构"},{"label":"深度剖析"},{"label":"推送通知"}]},{"id":"Tw7GpotxtOg9Aoega5jS","title":"其他客户端推送通知","pathname":"/architecture/deep-dives/push-notifications/non-mobile","siteSpaceId":"sitesp_sfvZm","breadcrumbs":[{"label":"架构"},{"label":"深度剖析"},{"label":"推送通知"}]},{"id":"Owz3Dq6WcyBWaQKqCAV0","title":"=SSH 密钥和代理","pathname":"/architecture/deep-dives/ssh","siteSpaceId":"sitesp_sfvZm","breadcrumbs":[{"label":"架构"},{"label":"深度剖析"}]},{"id":"cBLT0Sv4VjG3eWRhH29d","title":"=SSH 代理","pathname":"/architecture/deep-dives/ssh/agent","siteSpaceId":"sitesp_sfvZm","breadcrumbs":[{"label":"架构"},{"label":"深度剖析"},{"label":"=SSH 密钥和代理"}]},{"id":"Rblxiap1khPCtDPFUVWr","title":"=状态提供程序框架","pathname":"/architecture/deep-dives/state","siteSpaceId":"sitesp_sfvZm","breadcrumbs":[{"label":"架构"},{"label":"深度剖析"}]},{"id":"799HtByCMlGQ7skF6pqI","title":"=派生状态","pathname":"/architecture/deep-dives/state/derived-state","siteSpaceId":"sitesp_sfvZm","breadcrumbs":[{"label":"架构"},{"label":"深度剖析"},{"label":"=状态提供程序框架"}]},{"id":"xgXHvh5Tj8wrv80JiJoO","title":"=安全","pathname":"/architecture/security","siteSpaceId":"sitesp_sfvZm","breadcrumbs":[{"label":"架构"}]},{"id":"QJrrr3VX4baHjWulOYS5","title":"=定义","pathname":"/architecture/security/definitions","siteSpaceId":"sitesp_sfvZm","breadcrumbs":[{"label":"架构"},{"label":"=安全"}]},{"id":"cvElI9WRljQw9L9hm0tt","title":"=原则","pathname":"/architecture/security/principles","siteSpaceId":"sitesp_sfvZm","breadcrumbs":[{"label":"架构"},{"label":"=安全"}]},{"id":"iRT6qVTY1LN2yutkCf6P","title":"=P01 - 锁定的密码库是安全的","pathname":"/architecture/security/principles/locked-vault-is-secure","siteSpaceId":"sitesp_sfvZm","breadcrumbs":[{"label":"架构"},{"label":"=安全"},{"label":"=原则"}]},{"id":"k93e0SU2rJI46TpjbLMs","title":"=P02 - 半受损设备密码库的有限安全性","pathname":"/architecture/security/principles/limited-security-on-semi-compromised","siteSpaceId":"sitesp_sfvZm","breadcrumbs":[{"label":"架构"},{"label":"=安全"},{"label":"=原则"}]},{"id":"s1CANWYQoBzveLuYtP2c","title":"=P03 - 完全损坏的系统没有安全性","pathname":"/architecture/security/principles/no-security-on-fully-compromised","siteSpaceId":"sitesp_sfvZm","breadcrumbs":[{"label":"架构"},{"label":"=安全"},{"label":"=原则"}]},{"id":"KcJKGSIhnurJ4nEqJi3B","title":"=P04 - 控制密码库数据的访问权限","pathname":"/architecture/security/principles/controlled-access","siteSpaceId":"sitesp_sfvZm","breadcrumbs":[{"label":"架构"},{"label":"=安全"},{"label":"=原则"}]},{"id":"SQJIOQObgB9p7gX7HWcv","title":"=P05 - 将安全漏洞的影响降至最低","pathname":"/architecture/security/principles/minimized-impact-of-security-breaches","siteSpaceId":"sitesp_sfvZm","breadcrumbs":[{"label":"架构"},{"label":"=安全"},{"label":"=原则"}]},{"id":"3XbVtHpfkcXo3uVRwJGM","title":"=要求","pathname":"/architecture/security/requirements","siteSpaceId":"sitesp_sfvZm","breadcrumbs":[{"label":"架构"},{"label":"=安全"}]}]}