3

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

事实证明,Android 的 WebView(和它的 iOS 对应物)没有实现这一点,并且明确指出这不会发生。一个是被提及使用 Chrome 选项卡。

但我想做的是在移动设备上,即在应用程序内部,不要为此使用任何 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 有何关系?

4

2 回答 2

6

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

无法让它与本机 UI 一起使用,尤其是因为 WebAuthn 身份验证绑定到 URI(本机移动应用程序 UI 中没有该 URI)。

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

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

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

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

于 2019-08-27T18:13:34.567 回答
2

安卓网络认证

在 Android 的情况下,WebAuthn 可以通过两种方式实现。

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

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

注意 WebAuthN 在适用于 Android 的 Embedded WebView 中不起作用

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

于 2020-09-11T08:12:54.910 回答