如何在 Android 应用程序中实施 WebAuthn?
How to implement WebAuthn in an Android App?
我打算使用 WebAuthn 进行身份验证,如演示站点所示 https://webauthn.io
事实证明 Android 的 WebView(及其 iOS 对应物)没有实现这一点,并且明确声明这不会发生。一个被推荐使用 Chrome 选项卡。
但我想做的是在移动设备上,即在应用程序内,不为此使用任何 HTML/JavaScript。在应用程序中,我想使用类似于 Firebase 的 Java 库,但它确实提供了使用通过 WebAuthn 设置的相同帐户的方法,或者通过应用程序上的库设置帐户的方法然后稍后使用 WebAuthn 在浏览器中访问。
我遇到了 AppAuth https://github.com/openid/AppAuth-Android,但不确定这是否与 WebAuthn 相关。
我的目标是使用无密码和无电子邮件身份验证系统,以便用户可以通过 WebAuthn 在 Web 上使用它,并让他们的 App 代表他们通过库访问后端。一个不需要某人在 Facebook、Google 或任何其他提供商拥有用户帐户的系统。
我想避免在 Android 应用程序中使用像 Chrome 选项卡这样的解决方法,它应该全部在 Java 中处理,用户交互通过 Fragments。
我有哪些选择? FIDO2 是否能够提供提供此功能所需的一切?它与 OAuth 2.0 有什么关系?
WebAuthn 是浏览器的标准,这意味着它只能在今天的浏览器中实现。在 Android 上,它确实仅限于 ChromeCustomTabs 的浏览器。在 iOS 上,它可能在内部网络视图中被允许 - 但仍然在网络组件中。
无法让它与本机 UI 一起使用,尤其是因为 WebAuthn 身份验证绑定到 URI(本机移动应用程序 UI 中没有)。
WebAuthn 和 OAuth2 不相关。 OAuth2 是一种 API 访问控制协议:您首先使用 web flow 在授权服务器上获取令牌(某些特殊情况除外),这通常涉及身份验证和授权过程,然后在验证它们的 API 上使用这些访问令牌。 WebAuthn 是一种身份验证方案:初始注册后,用户无需提供密码即可使用身份验证器进行身份验证。
这两件事唯一相关的方式是 WebAuthn 可以用作 OAuth2 身份验证过程中的身份验证方案(而不是密码、通过电子邮件或 SMS 发送的 OTP、推送通知...)。
如果您想在同一移动设备上的本机应用程序和某些 Web 应用程序之间使用单一身份验证过程,方法是拥有一个唯一的中央身份验证服务,该服务将处理身份验证和 SSO(单点登录)。它可以防止用户拥有多个帐户、注册和身份验证过程。
为此,您的本机移动应用程序也必须使用它 - 因此需要使用 Web 身份验证。 AppAuth 是一个允许做这样的事情的库,并使用 OAuth2 协议(因此提供 OAuth2 访问令牌,以访问 APIs)。由于您的本机应用程序本身没有数据,但需要在某处检索数据(可能是 API),这可能正是您想要的。但据我所知,您无法使用片段实现 SSO,因为任何非 ChromeCustomeTab 组件都不会在应用程序外部共享 cookie。
Android WebAuthn
在Android情况下,WebAuthn 可以通过两种方式实现。
1 本机实现:
通过使用 Fido2ApiClient but this requires auth server to provide web request interfaces for attaching Fido credentials with the server. A code lab is available here https://codelabs.developers.google.com/codelabs/fido2-for-android/#0
2 自定义选项卡实现:
在自定义选项卡实施中,您必须为实施 WebauthN 的网站启动 URL。网站将使用 client-side 脚本执行 Fido 凭证相关操作。最后,它将调用重定向 link 以便应用程序在 activity 中处理,使用 manifest.xml 中 activity 的主机和方案声明。 Android CustomTabsIntent.Builder 在 chrome 浏览器选项卡 See the link
中提供了很多样式和自定义体验的选项
注意 WebAuthN 在 Android
的嵌入式 WebView 中不起作用
iOS WebAuthN
iOS ATM 仅提供一个选项,即浏览器中的自定义选项卡和在应用程序末尾重定向的处理 URL。
我打算使用 WebAuthn 进行身份验证,如演示站点所示 https://webauthn.io
事实证明 Android 的 WebView(及其 iOS 对应物)没有实现这一点,并且明确声明这不会发生。一个被推荐使用 Chrome 选项卡。
但我想做的是在移动设备上,即在应用程序内,不为此使用任何 HTML/JavaScript。在应用程序中,我想使用类似于 Firebase 的 Java 库,但它确实提供了使用通过 WebAuthn 设置的相同帐户的方法,或者通过应用程序上的库设置帐户的方法然后稍后使用 WebAuthn 在浏览器中访问。
我遇到了 AppAuth https://github.com/openid/AppAuth-Android,但不确定这是否与 WebAuthn 相关。
我的目标是使用无密码和无电子邮件身份验证系统,以便用户可以通过 WebAuthn 在 Web 上使用它,并让他们的 App 代表他们通过库访问后端。一个不需要某人在 Facebook、Google 或任何其他提供商拥有用户帐户的系统。
我想避免在 Android 应用程序中使用像 Chrome 选项卡这样的解决方法,它应该全部在 Java 中处理,用户交互通过 Fragments。
我有哪些选择? FIDO2 是否能够提供提供此功能所需的一切?它与 OAuth 2.0 有什么关系?
WebAuthn 是浏览器的标准,这意味着它只能在今天的浏览器中实现。在 Android 上,它确实仅限于 ChromeCustomTabs 的浏览器。在 iOS 上,它可能在内部网络视图中被允许 - 但仍然在网络组件中。
无法让它与本机 UI 一起使用,尤其是因为 WebAuthn 身份验证绑定到 URI(本机移动应用程序 UI 中没有)。
WebAuthn 和 OAuth2 不相关。 OAuth2 是一种 API 访问控制协议:您首先使用 web flow 在授权服务器上获取令牌(某些特殊情况除外),这通常涉及身份验证和授权过程,然后在验证它们的 API 上使用这些访问令牌。 WebAuthn 是一种身份验证方案:初始注册后,用户无需提供密码即可使用身份验证器进行身份验证。
这两件事唯一相关的方式是 WebAuthn 可以用作 OAuth2 身份验证过程中的身份验证方案(而不是密码、通过电子邮件或 SMS 发送的 OTP、推送通知...)。
如果您想在同一移动设备上的本机应用程序和某些 Web 应用程序之间使用单一身份验证过程,方法是拥有一个唯一的中央身份验证服务,该服务将处理身份验证和 SSO(单点登录)。它可以防止用户拥有多个帐户、注册和身份验证过程。
为此,您的本机移动应用程序也必须使用它 - 因此需要使用 Web 身份验证。 AppAuth 是一个允许做这样的事情的库,并使用 OAuth2 协议(因此提供 OAuth2 访问令牌,以访问 APIs)。由于您的本机应用程序本身没有数据,但需要在某处检索数据(可能是 API),这可能正是您想要的。但据我所知,您无法使用片段实现 SSO,因为任何非 ChromeCustomeTab 组件都不会在应用程序外部共享 cookie。
Android WebAuthn
在Android情况下,WebAuthn 可以通过两种方式实现。
1 本机实现: 通过使用 Fido2ApiClient but this requires auth server to provide web request interfaces for attaching Fido credentials with the server. A code lab is available here https://codelabs.developers.google.com/codelabs/fido2-for-android/#0
2 自定义选项卡实现:
在自定义选项卡实施中,您必须为实施 WebauthN 的网站启动 URL。网站将使用 client-side 脚本执行 Fido 凭证相关操作。最后,它将调用重定向 link 以便应用程序在 activity 中处理,使用 manifest.xml 中 activity 的主机和方案声明。 Android CustomTabsIntent.Builder 在 chrome 浏览器选项卡 See the link
注意 WebAuthN 在 Android
的嵌入式 WebView 中不起作用iOS WebAuthN iOS ATM 仅提供一个选项,即浏览器中的自定义选项卡和在应用程序末尾重定向的处理 URL。