如何在Android应用程序中实现WebAuthn?

nvbavucw  于 2023-03-27  发布在  Android
关注(0)|答案(3)|浏览(213)

我打算使用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 Tab的解决方案,它应该全部在Java中处理,并通过Fragments进行用户交互。
我有哪些选择?FIDO 2是否能够提供所有需要的功能?它与OAuth 2.0有何关系?

mzaanser

mzaanser1#

WebAuthn是浏览器的标准,这意味着它只能在浏览器中实现。在Android上,它确实仅限于ChromeCustomTabs的浏览器。在iOS上,它可能允许在内部webview中使用-但仍然是在web组件中。
没有办法让它与本机UI一起工作,特别是因为WebAuthn身份验证绑定到URI(本机移动的应用程序UI中没有)。
编辑:由于给出了这个答案,本机FIDO 2支持出现在:

截至2023年初,iOS仍然不支持它。
WebAuthn和OAuth2不相关。OAuth2是一个API访问控制协议:您首先使用 web流 * 在授权服务器上获取令牌(除了在某些特殊情况下),这通常涉及身份验证和授权过程,然后在验证它们的API上使用这些访问令牌。WebAuthn是一种身份验证方案: 在初始注册 * 之后,用户可以在不提供密码的情况下使用验证器进行验证。
这两件事的唯一联系是WebAuthn可以在OAuth2身份验证过程中用作身份验证方案(而不是密码,通过电子邮件或SMS发送的OTP,推送通知......)。
如果您希望在同一移动终端上的本地应用程序和某些Web应用程序之间具有单一身份验证过程,那么要做的就是拥有一个独特的中央身份验证服务,该服务将处理身份验证和SSO(单点登录)。它可以防止用户拥有多个帐户,注册和身份验证过程。
要做到这一点,您的本地移动的应用程序也必须使用它-因此使用Web身份验证。(因此提供了OAuth2访问令牌来访问API)。(可能是一个API),这可能是你想要的。但据我所知,你不能用片段实现SSO,因为任何非ChromeCustomeTab组件都不会在应用程序之外共享cookie。

uyhoqukh

uyhoqukh2#

Android WebAuthn

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

**1原生实现:**通过使用Fido2ApiClient,但这需要auth服务器提供Web请求接口,用于将Fido凭据附加到服务器。代码实验室可在www.example.com获得https://codelabs.developers.google.com/codelabs/fido2-for-android/#0
2自定义页签实现:

在自定义选项卡实现中,您必须启动实现WebauthN的网站的URL。网站将使用客户端脚本执行Fido凭据相关操作。最后,它将调用一个重定向链接,以便应用使用manifest.xml中Activity的host和scheme声明在Activity中处理。Android CustomTabsIntent。Builder提供了很多选项来样式化和自定义chrome浏览器标签页See the link中的体验。

注意*WebAuthN在Embedded WebView for Android中不起作用 *
iOS WebAuthNiOS ATM仅提供一个选项,即浏览器中的自定义选项卡,并在应用程序的末尾处理重定向的URL。

相关问题