Firebase Auth:如何预先创建 Auth 用户以使用 Microsoft 提供商登录?

Firebase Auth: How can I pre-create Auth Users for signin with the microsoft provider?

我想将角色分配给事先已知的用户,以便他们在注册时拥有适当的权限。我想我可以通过管理员预先创建授权用户 API 而无需链接提供商,如果用户存在,他们会在登录时自动链接,因为电子邮件匹配。

这没有用,Firebase 使用相同的电子邮件和另一个 UID 创建了另一个用户,或者抱怨提供者已链接,即使有 none。

我已经考虑实施自定义令牌来转换活动目录登录令牌和新生成的 firebase 用户以匹配现有用户。

我在 firestore 中有用户的声明数据。如果可能的话,我希望保留用户 ID,这使得仅更新新 Auth 对象的声明变得困难。

Firebase Auth 会将通过 Microsoft 登录您的应用程序的用户的 objectId 属性(例如 8066569b-7203-4894-8552-4be01e28d2a2)与附加的 microsoft.com 提供商的 uid 值进行匹配在他们的 providerData 中给您的 Firebase Auth 用户。只要您知道 Microsoft 用户在首次登录之前的 objectId,就可以通过 Admin SDK(Node JS 示例)分两步创建 Firebase Auth 帐户:

  1. (尝试)创建用户 - 可能会处理用户已经使用他们的 Microsoft 帐户或与他们的 Microsoft 帐户共享相同电子邮件地址的其他提供商在您的应用程序中创建帐户的情况,如果您想阻止这个。
const user = await admin.auth().createUser({ email: userName }).catch(() => {/* TODO */})
  1. Link microsoft.com 提供商,将 objectId 作为 'microsoft.com' 提供商的 uid 传递给Link 并添加其余用户信息
let updatedUser = await admin.auth().updateUser(user.uid, {
    displayName,
    emailVerified: true,
    disabled: active === false,
    providerToLink: {
        providerId: 'microsoft.com',
        displayName,
        email: userName,
        uid: externalId // e.g. 8066569b-7203-4894-8552-4be01e28d2a2
    }
})

此设置可用于创建 POST /Users SCIM 端点,该端点支持从 Azure AD 供应到 firebase Auth。创建新的企业应用程序后,只需确保在用户配置配置中的属性映射配置中,objectId 属性映射到您的端点将收到的内容,例如externalId上面用的是