Xamarin 表单应用程序上的 Azure B2C 登录,具有 Face/TouchId/Fingerprint/Keychain 与 API 的集成

问题描述

我们使用 Azure B2C 来登录/验证我们的用户。这在我们的网站上运行良好(社交和电子邮件登录等)。 我们的移动应用程序是在 Xamarin 表单中构建的,我们正在尝试构建本机登录体验(使用本机应用程序控件与 B2C 呈现的应用程序内的 Web 视图),该体验与用于登录的设备生物识别(FaceId、TouchId、指纹)本机集成登录)。 可以想象,在 Azure B2C 所需的 webview 中执行此操作不允许本机登录体验。 这里的总体目标是 2 倍:

  1. 打造原生登录体验
  2. 与生物识别技术集成。

问题

  1. Azure B2C 是否有支持功能的 API,特别是我们可以在没有 UI 的情况下使用 authorization code flowROPC 存在,但是否也与社交帐户集成?
  2. 如果没有,当登录屏幕显示在 Web 视图中时,是否可以将生物识别登录与移动设备上的 Azure B2C 集成?这样当 webview 中的 B2C 登录页面出现时,用户可以使用 touch/faceId 登录并将该信息保存到他们的钥匙串中(在 iOS 上和 Android 上的等价物)

解决方法

您需要使用 Webviews,并且您可以启用具有 webview 类型体验的生物识别集成。

  1. 您不能将任何服务与社交帐户和 ROPC 集成。任何与 Social IdP 的集成都需要一个网络视图。

  2. 是的,为长期会话启用 Keep Me Signed In。将生物识别代码包裹在 AcquireTokenSilent() 方法周围。

那么你有两个选择:

  1. 您可以隐藏 KMSI 按钮,并使用 JavaScript 使用页面 customisation 在登录页面中强制选中 KMSI 复选框。

  2. 您可以在登录页面上重命名 KMSI 标签,以询问用户是否要注册生物识别。登录后,无论用户是否选择加入,您的应用都会收到令牌中的声明,请使用 claim resolver 来实现。

现在您有一个用户登录到应用程序,使用:

  1. 1 小时 access token
  2. 可能达到无限长refresh token
  3. 多天/一年 Azure AD B2C session cookie

然后,当用户重新尝试打开应用程序或在应用程序中执行某些操作时,您将需要调用acquireTokenSilent()。此 MSAL 方法获取所需 API 资源/范围的新访问令牌。

如果令牌已过期,或需要不同的范围,则获取新令牌。

您可以使用生物识别 SDK 在您的应用程序中封装任何操作。

 if (performingSomeAction && requiresBiometric)
   if (challengeBiometric succeeds)
     acquireTokenSilent() 
     //do someAction

现在,如果刷新令牌已过期,则将弹出 Web 视图,长寿命会话 cookie 将用于获取新令牌。 AcquireTokenSilent() 方法已经处理了所有这些。