如何在 Android 应用中实现 WebAuthn?

Dan*_*l F 2 authentication android webauthn fido

我打算使用 WebAuthn 进行身份验证,如演示站点https://webauthn.io 所示

事实证明,Android 的 WebView(及其 iOS 对应版本)没有实现这一点,并且明确表示这不会发生。一个是被提及使用 Chrome 标签。

但我想要做的不是在移动设备上,即在 App 内使用任何 HTML/JavaScript。在应用程序中,我想使用类似于 Firebase 的 Java 库,但它确实提供了使用通过 WebAuthn 设置的相同帐户的方法,或者通过应用程序上的库设置帐户,然后可以访问在浏览器中使用 WebAuthn。

我遇到了 AppAuth https://github.com/openid/AppAuth-Android并且不确定这是否与 WebAuthn 相关。

我的目标是使用无密码和无电子邮件身份验证系统,以便用户通过 WebAuthn 在 Web 上使用它,并让他们的应用程序代表他们通过库访问后端。不需要某人在 Facebook、Google 或任何其他提供商处拥有用户帐户的系统。

我想避免在 Android 应用程序中使用像 Chrome 选项卡这样的解决方法,它应该全部用 Java 处理,并且通过 Fragments 进行用户交互。

我有哪些选择?FIDO2 是否能够提供提供此功能所需的一切?它与 OAuth 2.0 有何关系?

Imr*_*aig 7

Android 网络认证

对于 Android WebAuthn 可以通过两种方式实现。

1 本机实现: 通过使用Fido2ApiClient,但这需要身份验证服务器提供 Web 请求接口,用于将 Fido 凭据附加到服务器。代码实验室可在此处https://codelabs.developers.google.com/codelabs/fido2-for-android/#0

2 自定义选项卡实施:
在自定义选项卡实施中,您必须启动实施 WebauthN 的网站的 URL。网站将使用客户端脚本执行 Fido 凭证相关操作。最后,它将调用应用程序的重定向链接,以使用清单.xml 中活动的主机和方案声明在活动中进行处理。Android CustomTabsIntent.Builder 提供了很多选项来设计和自定义 chrome 浏览器选项卡中的体验,请参阅链接

注意 WebAuthN 不适用于 Android 的嵌入式 WebView

iOS WebAuthN iOS ATM 仅提供一种选项,即浏览器中的自定义选项卡并在应用程序末尾处理重定向的 URL。


Tan*_*gui 6

WebAuthn 是浏览器的标准,这意味着它只能在今天的浏览器中实现。在 Android 上,它确实仅限于 ChromeCustomTabs 的浏览器。在 iOS 上,它可能在内部 webviews 中被允许 - 但仍然在 web 组件中。

没有办法让它与本机 UI 一起工作,特别是因为 WebAuthn 身份验证绑定到一个 URI(在本机移动应用程序 UI 中没有)。

WebAuthn 和 OAuth2 没有关系。OAuth2 是一种 API 访问控制协议:您首先使用Web 流(某些特殊情况除外)在授权服务器上获取令牌,这通常涉及身份验证和授权过程,然后在验证它们的 API 上使用这些访问令牌。WebAuthn 是一种身份验证方案:在初始注册后,用户无需提供密码即可使用身份验证器进行身份验证。

这两件事相关的唯一方式是 WebAuthn 可以用作 OAuth2 身份验证过程中的身份验证方案(而不是密码、通过电子邮件或短信发送的 OTP、推送通知......)。

如果您希望在您的本机应用程序和同一移动设备上的某些 Web 应用程序之间进行单一身份验证过程,那么要走的路是拥有一个独特的中央身份验证服务来处理身份验证和 SSO(单点登录) . 它可以防止用户拥有多个帐户、注册和身份验证过程。

为此,您的本机移动应用程序也必须使用它 - 因此使用 Web 身份验证。AppAuth 是一个允许执行此类操作的库,并使用 OAuth2 协议(因此提供 OAuth2 访问令牌,以访问 API)。由于您的本机应用程序本身没有数据,但需要在某处(可能是 API)检索数据,这可能就是您想要的。但是据我所知,您无法使用片段实现 SSO,因为任何非 ChromeCustomeTab 组件都不会在应用程序之外共享 cookie。

  • WebAuthn 可以使用 Fido2ApiClient 在 Android 上本地实现(https://developers.google.com/android/reference/com/google/android/gms/fido/fido2/Fido2ApiClient)这里是一个完整的谷歌代码实验室解释了这个过程。 (2认同)