Revolut 已悄然推出 Passkeys。在我们的全面分析中,了解此举对银行安全、用户体验的影响以及有待改进之处。
Vincent
Created: July 15, 2025
Updated: July 16, 2025
See the original blog version in English here.
Want to learn how top banks deploy passkeys? Get our 80-page Banking Passkeys Report (incl. ROI insights). Trusted by JPMC, UBS & QNB.
Get Report在数字银行领域,既要保证强大的安全性,又不能牺牲用户体验,这种需求催生了许多创新解决方案。其中,作为用户认证新标准的 Passkeys 格外引人注目。总部位于伦敦的领先新型银行 Revolut,最近已悄然开始为其个人和企业账户推出 Passkeys。这一战略举措不仅顺应了市场对更安全、更便捷数字体验日益增长的需求,也让 Revolut 成为了**银行界采用 Passkeys 的先驱**。
随着 Passkeys 的推出,Revolut 紧随科技巨头的步伐,加入了由 Coinbase、WhatsApp、任天堂和 Uber 引领的 Passkeys 浪潮。在金融领域,Revolut 是首批(如果不是迄今为止规模最大的)推出 Passkeys 的银行之一。
免责声明:我们预计在未来几周内,Passkeys 将会更大规模地逐步推出,并且其中的错误也将得到修复。我们将相应地更新这篇文章。当前版本截至 2024 年 2 月 7 日。
Passkeys 代表了无密码认证的下一个阶段,为用户提供了一种无缝且安全的账户访问方式。与传统密码不同,Passkeys 无需用户记住复杂的密码,而是依赖于非对称加密技术,为每个用户和设备生成唯一的密钥。这种方法不仅通过降低网络钓鱼攻击和数据泄露的风险来增强安全性,还简化了登录流程,用户只需使用 Face ID、Touch ID 或 Windows Hello 即可,从而改善了整体用户体验。
Revolut 采取了分阶段引入 Passkeys 的策略,并且没有同时为企业账户和个人账户推出所有功能。我们在研究中发现的主要差异如下表所示:
功能 | Revolut 个人账户 | Revolut 企业账户 |
---|---|---|
登录页面显示 Passkey 登录按钮 | 否 | 是 |
在新设备上成功登录后弹出 Passkey 推广窗口 | 是,但在所有设备上均未成功 | 是,在所有设备上均显示,但仅在 Windows 11 上成功创建 Passkey |
账户安全设置中提供 Passkey 设置 | 是,但没有创建 Passkey 的按钮 | 否 |
原生 iOS / Android 应用支持 Passkeys | 否 | 否 |
在 Revolut 的 Passkey 集成中,以下几个方面值得肯定:
虽然 Revolut 迈向 Passkey 集成的大胆一步值得称赞,但这次推出并非没有瑕疵。
接下来,我们将更深入地探讨 Revolut 个人和企业账户,以及 Passkeys 在特定设备和平台上的推出情况。
我们首先仔细研究 Revolut 企业账户的网页应用,然后再分析其原生应用。
为保持下文简洁,我们仅重点介绍特定的平台、设备和浏览器组合。
请注意,您只有在首次使用现有认证方法成功登录后,才会收到一次来自 Revolut 的 Passkey 弹窗。要再次触发该弹窗,您需要删除 Revolut 的 Cookie 或在无痕/隐私浏览器模式下访问该网站。
当您访问 Revolut 企业版的登录页面时,您会立刻注意到一个醒目的新登录选项,位于电子邮件输入框下方、Google / Apple 社交登录之上,标签为:Continue with passkey(使用 Passkey 继续)。
Passkeys 推广弹窗如下所示:
有趣的是,对于 Revolut 企业账户,尽管主要用户标识符是电子邮件地址,但 Passkeys 却与电话号码绑定,这可能是因为 Revolut 个人账户首先是使用电话号码创建的。
现在您已在 Windows 11 和 Chrome 上成功创建了 Passkey,您可以登出并在登录页面上点击 Continue with passkey。随后,浏览器将弹出处理 Passkey 认证的用户界面:
与 Revolut 企业账户当前的登录流程(需要提供密码并通过原生应用中的推送通知或电子邮件魔法链接作为第二因素来确认身份)相比,Passkey 登录不需要额外的认证方法,因为 Passkeys 本身就具备双因素认证(2FA)的功能。这代表了用户体验的显著提升,尤其是在桌面设备上,因为它消除了切换上下文或使用第二台设备的需要。
在 Android 14 和 Chrome 121 中,Continue with passkey 登录按钮非常显眼。
在 iOS 17.3 和 Safari 中,Continue with passkey 登录按钮同样非常显眼。
Revolut 企业版的原生 iOS 和 Android 应用目前尚不支持 Passkeys。因此,在 iOS(见截图)或 Android 应用的“安全与隐私”部分没有 Passkey 选项:
首先需要注意的一个区别是,Revolut 个人账户使用电话号码作为主要用户标识符。认证方式是通过一个 6 到 12 位的密码,而不是传统密码;而 Revolut 企业账户则使用一个 4 位密码,并在默认登录流程中使用密码。
为保持下文简洁,我们仅重点介绍特定的平台、设备和浏览器组合。
首次登录时(或在删除 Cookie / 使用隐私浏览器模式后),会显示以下 Passkey 推广弹窗:
出于某种原因,在上一屏幕点击 Add passkey 后,我们被直接转到了已登录页面,而没有机会通过 Touch ID 启动 Passkey 创建流程。在调查此问题时,我们在 Safari 开发者工具的网络标签页中找到了相应的 API 调用 (https://sso.revolut.com/api/challenges /webauthn)。然而,此 API 调用返回了 HTTP 403 状态码,表明该功能显然尚未完全推出。
与 Revolut 企业账户不同,Revolut 个人账户的账户设置中有一个 Passkeys 部分:
首次登录时(或在删除 Cookie / 使用隐私浏览器模式后),会显示以下 Passkey 推广弹窗:
Revolut 个人账户的原生 iOS 和 Android 应用目前尚不支持 Passkeys。然而,iOS 应用和 Android 应用(见下方截图)的安全设置部分都有一个 Passkeys 的设置项:
下面,我们将深入探讨一些技术方面的问题。
我们研究了技术实现的具体细节。主要是,每次加载登录页面时,都会向后端发送一个 client_id,后端会根据账户类型返回不同的认证选项:
有趣的是,Revolut 个人账户的 Passkey 选项已经准备好但尚未激活(见下方截图),这表明推出可能迫在眉睫,并且可以迅速实施,从而也为个人账户启用一个 “Continue with passkey” 按钮。
显示登录选项的决定是基于 client_id 的。例如:https://sso.revolut.com/signin?client_id=o3r08ao16zvdlf2y5fde 出于实验目的,我们将 client_id 更改为一个随机值,这在 Windows 11 的 Chrome 浏览器上显示了所有登录选项(包括在电话号码和电子邮件作为登录标识符之间切换的可能性)。
在登录流程中,我们分析了 PublicKeyCredentialRequestOptions。值得注意的是,allowCredentials 并未设置,而信赖方 ID (relying party ID) 被设置为“sso.revolut.com”。从安全角度来看,将 userVerification 设置为“preferred”是一个谨慎的选择。
publicKeyCredentialRequestOptions.json{ "allowCredentials": [], "challenge": "WHAxZnJDaDB1VnNXMmlOQW1hVndqdTYzSzF3emR3b3gtRFRCWHVxRjJYRQ", "rpId": "sso.revolut.com", "userVerification": "preferred" }
我们还分析了向原生 iOS 和 Android 应用的推广可能会是什么样子,因此我们使用了 sso.revolut.com 的信赖方 ID,并附加了 assetlinks.json (Android) 和 apple-app-site-association (iOS) 文件的路径,以查看这些文件可能已经包含哪些关于 Passkey 推出的信息。
尝试访问 https://sso.revolut.com/.well-known/assetlinks.json 会导致 nginx 返回 404 错误,这表明文件管理使用了反向代理。通过使用域名 https://app.revolut.com,我们在 https://app.revolut.com/.well-known/assetlinks.json 找到了 assetlinks.json,它为 Revolut 个人账户提供了有价值的信息:
assetlinks.json[ { "relation": ["delegate_permission/common.handle_all_urls"], "target": { "namespace": "android_app", "package_name": "com.revolut.revolut", "sha256_cert_fingerprints": [ "9C:9B:E0:71:35:E9:72:78:02:82:C2:E5:D2:7D:A0:6E:CB:8E:E3:AD:FC:75:30:39:17:DD:F6:6D:6F:AA:EF:A4", "11:F2:5B:D6:30:60:CE:B4:EF:EC:48:7C:C8:1F:6D:3D:D0:3A:75:C3:E9:D2:C5:32:3D:69:55:9D:C1:7F:6A:23" ] } }, { "relation": ["delegate_permission/common.handle_all_urls"], "target": { "namespace": "android_app", "package_name": "com.revolut.revolut.test", "sha256_cert_fingerprints": [ "90:EC:5D:75:11:4E:67:B7:F1:3F:C0:D0:57:85:9B:78:0D:A0:BA:49:E2:22:4C:60:42:7E:D2:EA:00:84:D1:B7" ] } } ]
通过 https://well-known.dev,我们还在 https://business.revolut.com/.well-known/assetlinks.json 发现了 Revolut 企业版的关联文件:
assetlinks.json[ { "relation": ["delegate_permission/common.handle_all_urls"], "target": { "namespace": "android_app", "package_name": "com.revolut.business", "sha256_cert_fingerprints": [ "9C:9B:E0:71:35:E9:72:78:02:82:C2:E5:D2:7D:A0:6E:CB:8E:E3:AD:FC:75:30:39:17:DD:F6:6D:6F:AA:EF:A4", "9F:07:80:54:0F:3A:C9:6F:D7:26:02:8A:37:C5:CD:48:DB:A3:67:EE:2D:93:B3:9D:DE:51:BC:F2:2E:7F:B1:88", "F8:F5:95:3A:C3:85:DB:0D:85:C3:56:E9:9B:37:BD:CA:4D:EE:B0:D2:52:C6:2A:36:4F:BA:C8:3B:C6:AF:3A:C2" ] } } ]
由于 Revolut 个人账户和企业账户的 assetlinks.json 文件都不位于信赖方 (relying party) ID 指定的用于关联原生 Android 应用和网页应用的路径上,因此需要进行哪些更改才能使 Passkeys 在网页和原生 Android 应用之间工作,这一点非常有趣。
Revolut 个人账户的 apple-app-site-association 文件可在 https://revolut.com/.well-known/apple-app-site-association 访问,其中尚未添加有关 Web 凭证的详细信息:
apple-app-site-association{ "applinks": { "apps": [], "details": [ { "appID": "QUZEZSEARC.com.revolut.revolut", "paths": ["/app/*"] }, { "appID": "QUZEZSEARC.com.revolut.test", "paths": ["/app/*"] } ] } }
相比之下,Revolut 企业版的 apple-app-site-association 文件包含更全面的信息,特别是在 Web 凭证方面。这表明 iOS 应用 QUZEZSEARC.com.revolut.business 已配置为与 Revolut 企业网页应用共享凭证。该文件可在 https://business.revolut.com/.well-known/apple-app-site-association 访问。
{ "applinks": { "apps": [], "details": [ { "appID": "QUZEZSEARC.com.revolut.business", "paths": [ "/", "/accept-payments/in-person", "/accept-payments/online-requests", "/accept-payments/web-integrations", "/accounts", "/accounts/connect-external", "/accounts/connect-external/*", "/accounts/new", "/accounts/transactions", "/account-transactions/*", "/action/confirm", "/add-card-to-wallet", "/advances", "/advances/manual-repayment", "/app/*", "/application", "/approvals/requests", "/article/*", "/articles/*", "/bug-report", "/card-reader/order", "/cards", "/cards/*", "/cards/*/sca-counters-exceed", "/cards/*/sca-counters-warn", "/cards/*/security", "/cards/*/settings", "/cards/*/transactions", "/cashback", "/catalogue/manage", "/challenges/*", "/consumer-tickets/*", "/crypto", "/e-commerce", "/exchange", "/expense-documents/*", "/expenses", "/expenses/*", "/faq", "/faq/*", "/favourites", "/form", "/form/*", "/help-centre", "/help-centre/topic/*", "/hub/integrations", "/insurance", "/invoices", "/invoices/*", "/marketplace", "/merchant", "/merchant/*", "/new-card-acceptance-pricing", "/offboarding", "/open-onboarding-application-next-step", "/orders", "/pay-in-store/order/*", "/payments", "/payments/scheduled", "/payments/transfers", "/plan/subscriptions", "/points", "/pricing-plans", "/qr-code-sign-in/*", "/referrals", "/referrals/invite-contacts", "/referrals/invitee-details/*", "/request-info", "/request-info/merchant", "/requests", "/requests/request", "/reset-password", "/rewards", "/sales/revolut-me", "/statements", "/savings", "/send", "/settings/accounts-and-documents", "/settings/business-profile", "/settings/manage-devices", "/settings/merchant-profile", "/settings/merchant-profile/branding", "/settings/notifications", "/settings/personal-profile", "/settings/trusted-merchants", "/settings/vat-number", "/signup/invite", "/stories/*", "/story/*", "/subscriptions", "/team", "/team/approvals", "/team/member/add", "/team/roles", "/tip/settings", "/topup", "/transactions", "/transactions/*/add-expense-info", "/transactions/*/add-info-flow", "/transactions/*/chargeback-status", "/transfers", "/treasury", "/upgrade", "/vouchers" ] } ] }, "webcredentials": { "apps": ["QUZEZSEARC.com.revolut.business"] } }
与 Android 的情况一样,鉴于网页应用的信赖方 (relying party) ID (sso.revolut.com) 没有在预期位置找到关联文件,如何在原生应用和网页应用之间实现 Passkeys 的跨平台共享仍然是一个有趣的问题。
总而言之,Revolut 推出 Passkey 是在银行领域革新用户认证的重要一步。通过采用 Passkeys,Revolut 不仅通过摆脱传统密码提高了安全性,还通过更简单的登录过程显著增强了用户体验。尽管在初步推出中面临挑战,包括跨设备的不一致性和缺乏原生应用支持,但 Revolut 的努力突显了其对数字创新和以用户为中心的设计的承诺。
技术分析表明,虽然无缝 Passkey 集成的基础已经奠定,但仍有待改进的领域。加强沟通、确保跨平台的一致性以及将支持扩展到原生移动应用是关键的后续步骤。解决这些问题不仅将完善 Revolut 的实施,还将为行业树立一个基准,鼓励其他金融机构尽快采用 Passkeys(另请参阅我们关于 Passkeys 的 PSD2 合规性博文)。
Next Step: Ready to implement passkeys at your bank? Our 80-page Banking Passkeys Report is available. Book a 15-minute briefing and get the report for free.
Get the Report
Enjoyed this read?
🤝 Join our Passkeys Community
Share passkeys implementation tips and get support to free the world from passwords.
🚀 Subscribe to Substack
Get the latest news, strategies, and insights about passkeys sent straight to your inbox.
Related Articles
Table of Contents