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

Azure B2C Login on Xamarin forms app with Face/TouchId/Fingerprint/Keychain integration with API

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

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

问题:

  1. Azure B2C 是否具有启用此功能的 API,尤其是我们可以使用 authorization code flow without a UI. ROPC,但它是否也与社交帐户集成?
  2. 如果没有,当登录屏幕显示在 Web 视图中时,是否有办法将生物识别登录与移动设备上的 Azure B2C 集成?因此,当显示 Web 视图中的 B2C 登录页面时,用户可以使用 touch/faceId 登录并将该信息保存到他们的钥匙串(在 iOS 和 Android 上的等价物)

您需要使用 Webviews,您可以启用 Biometric 集成与 webview 类型的体验。

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

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

那么你有两个选择:

  1. 您可以隐藏 KMSI 按钮,并使用 JavaScript 强制 select 使用页面 customisation.[=17= 登录页面中的 KMSI 复选框]

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

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

  1. 1 小时 access token
  2. 可能长达无限长refresh token
  3. 多个 day/year Azure AD B2C session cookie

然后,当用户再次尝试打开应用程序,或在应用程序中执行某些操作时,您将需要调用 acquireTokenSilent()。此 MSAL 方法为所需的 API resource/scope.

获取新的访问令牌

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

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

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

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