9

问题陈述:

我想使用 FIDO2 协议(通过提供 SDK)解决 Android 应用程序上的用户身份验证,而无需为同一设备上的不同应用程序执行多个注册仪式。例如,如果用户已经在 Android 应用 A 中注册(生成公钥-私钥对),则他/她不需要在 Android 应用 B 中注册(假设 App A 和 App B 在同一设备上) .

可能的解决方案是什么(据我所知):-

  1. 与应用程序 A 和 B 集成的通用 SDK,以提供身份验证。
  2. 单独的身份验证应用程序。

我想继续使用解决方案 1,因为解决方案 2 可能不可取,因为它需要额外的步骤来下载额外的应用程序(身份验证应用程序)。

我现在能实现什么:- 我们能够通过为应用 A 和应用 B 维护单独的私钥来对应用 A 和应用 B 的用户进行无密码身份验证。

在此处输入图像描述 在上图中:-

  1. 用户 XYZ 登录到应用程序 A 并在此设备上向应用程序 A 注册自己。
  2. 在注册步骤中,认证者会生成一个公私密钥对。
  3. PrivateKey_1(PrivateKey) 被创建并存储在 Keystore 中,PublicKey_1(PublicKey) 被创建并与服务器共享。
  4. 现在假设用户 XYZ 想要登录应用程序 B。用户 XYZ 重复相同的过程以将他注册到应用程序 B。
  5. 在这个过程中,PrivateKey_2 被创建并存储在 Keystore 中,PublicKey_2 被创建并与服务器共享。
  6. 因此,在上述场景中,用户 XYZ 能够分别使用私钥 PrivateKey_1 和 PrivateKey_2 在 App A 和 App B 上进行身份验证。

我想知道以下场景的可行性? 我想对应用程序 A 和应用程序 B 的用户 XYZ 进行无密码身份验证,其中应用程序(应用程序 A 和应用程序 B)可以使用相同的凭据(公钥和私钥对)并且不需要执行重复的注册仪式(创建公共和私钥)用于同一设备上的同一用户,用于共享公共 SDK(应用 A 和应用 B)的多个应用。

在此处输入图像描述 在上图中:-

  1. 用户 XYZ 登录到应用程序 A 并在此设备上向应用程序 A 注册自己。
  2. 在这个过程中,PrivateKey_1 被创建并存储在 Keystore 中,PublicKey_1 被创建并与服务器共享。
  3. 用户 XYZ 想要登录应用程序 B。
  4. 应用 B 应该能够使用先前生成的凭据(由应用 A)验证用户 XYZ。

这甚至可能吗?我的理解有什么差距吗?

任何建议和帮助都是非常可观的:) :)

4

3 回答 3

2

只要您在尝试身份验证时引用相同的RP ID,就可以在 API 可用的任何地方重复使用 FIDO2 凭据。FIDO 凭据绑定到唯一的 RP ID,只要您可以证明 RP ID 的所有权,您就可以使用与同一 RP ID 关联的任何凭据请求身份验证。

对于 Android,只要两个应用程序都连接到一个网站及其唯一的 RP ID,您就可以跨应用程序进行身份验证。要将您的应用程序连接到网站,请查看FIDO2 API for Android文档,尤其是其与您的网站的互操作性部分。它链接到用于在您的网站上设置数字资产链接的 Google 页面,以便您可以证明 RP ID 的所有权并使用与其关联的凭据在应用程序之间进行身份验证。

一旦您的应用程序和网站链接并且用户已在一个应用程序中注册,您就应该能够Fido2ApiClient.getSignPendingIntent()在您的第二个应用程序中进行身份验证,只要您指定站点的 RP ID(与注册期间指定的相同)作为您rpIdPublicKeyCredentialRequestOptions传递给方法。

PS 所有这一切的好处是,您在本机应用程序中使用 Fido2ApiClient(或其他平台上的任何等效 API)注册的凭据稍后可用于使用浏览器中的 WebAuthn API 登录您的网站;您只需要在PublicKeyCredentialRequestOptions传递给 WebAuthn 的中引用相同的 RP ID navigator.credentials.get()

于 2022-02-11T14:35:15.527 回答
1

FIDO2 的主要优点之一是它可以防止攻击者试图冒充真正的回复方的中间人攻击。FIDO2 密钥只会响应注册了私钥的 RP。跨多个 RP 共享 authn 会破坏这种模式。我不知道在 Android 设备上可能发生什么,但我原以为您需要某种形式的身份验证代理(IdP),您使用密钥对其进行身份验证,它负责向应用程序证明身份验证。

于 2022-02-15T09:20:40.757 回答
0

这些帐户是否在同一服务上注册?阅读与您的网站部分的 Android FIDO2 API互操作性,似乎可以托管https://example.com/.well-known/assetlinks.json列出的多个 Android 应用程序。

于 2022-02-11T14:35:13.637 回答