我可以使用管理员身份验证 API 在 Firebase 中手动创建联合用户吗?
Posted
技术标签:
【中文标题】我可以使用管理员身份验证 API 在 Firebase 中手动创建联合用户吗?【英文标题】:Can I create a federated user in firebase manually using admin authentication api? 【发布时间】:2018-01-27 01:26:37 【问题描述】:我有一个使用 firebase 构建的 Web 应用程序。在我的网络应用程序中,我有 google、firebase、twitter 注册/登录功能。
现在我想将它与我的 api.ai 代理集成并进行无缝帐户链接。因此,用户将使用移动设备上的 googel Home/assistant 应用程序连接到我的代理。在这个阶段,我将拥有谷歌帐户 ID、谷歌电子邮件、用户名。
如果用户已经在场,我可以发送我的代理所需的令牌。但如果用户是新用户,我想在我的 firebase 数据库中创建该帐户。我找不到在 firebase 中手动创建联合帐户的可能性(来自 nodejs 应用程序/云功能)!
我知道create a email + dummy password account 有可能,但这不是我想要的。因为用户在尝试登录我的网络应用程序时使用虚拟密码注册,所以会使用他们的谷歌登录功能。
如果我创建电子邮件和虚拟密码,则流程不好,当用户访问我的网络频道时,我必须强制用户更改密码并再次链接他们的谷歌帐户!
有 CLI 方法,我可以在其中 import users from the file。如果这是一种可能性,有人可以帮助我如何在云功能中完成这项工作吗?
【问题讨论】:
【参考方案1】:这不是问题的完整答案
基于firebase tools import option,我创建了一个精简的要点,使用它我可以触发从云功能导入。我面临的唯一故障是我必须传递 Bearer 访问令牌以执行操作的地方。
到目前为止,我已经在 import/api.js
中短路了 getAccessToken
方法。这是我需要 Firebase 团队帮助的地方,以便直接为 Firebase 管理员获取访问令牌,或者在从云功能中发出请求时绕过检查!
getAccessToken: function()
return Promise.resolve(access_token: accessToken);
// return accessToken ? RSVP.resolve(access_token: accessToken) : require('./auth').getAccessToken(refreshToken, commandScopes);
,
在上述函数中,注释代码实际上是在从 CLI 工具执行firebase import
时获得用户正在运行的accessToken
。作为一个命令行实用程序,要求用户获得许可是可行的,但是在云函数中运行时,它应该是我可以考虑的以下选项之一!
a) 由于云功能在管理员权限内执行,请忽略权限! b) 或提供直接从管理 SDK 获取访问令牌的方法。
要点is present in here in github。我从firebase tools project 中获取了大部分内容,并进行了一些调整以使其能够在cloudFunctions 中工作。我试图从 firebase-tools 中引入尽可能少的代码。
当我运行它时,我遇到的错误位于第 35 行 lib/import/api.js
:
<<< HTTP RESPONSE BODY
"error":
"errors":[
"domain":"global",
"reason":"authError",
"message":"Invalid Credentials",
"locationType":"header",
"location":"Authorization"
],
"code":401,
"message":"Invalid Credentials"
【讨论】:
以上是关于我可以使用管理员身份验证 API 在 Firebase 中手动创建联合用户吗?的主要内容,如果未能解决你的问题,请参考以下文章
身份验证在 FirebaseStorage Flutter 中不起作用
使用自己的身份验证服务器复制 firebase-auth 模块和 firebase-common-auth
Azure API 管理 - 与底层服务进行身份验证和授权同步