我有一个关于firebase身份验证的问题。实际上,我正在为我的公司制作一个 Jmeter 板,我将在firebase中托管它。我想将电子邮件身份验证仅限于我的公司域(例如:cat.com)。但是我浏览了stackoverflow的答案,我发现我可以在数据库中施加规则。但问题是,我将调用外部数据库来使用Firebase Function获取数据并将其提供给网站( Jmeter 板)。因此,没有特定于域的规则将在那里应用。下面是我的 Jmeter 板架构的概述
我如何才能实现这一点?我希望拥有“www.example.com”的人xxxx@cat.com能够验证和查看 Jmeter 板数据
4条答案
按热度按时间5cg8jx4n1#
如果您的公司使用GSuite &通过“Login With Google”登录
Firebase的Google Login是建立在普通的Google Logins之上的,并且有很多自动化功能。其中包括创建一个新的OAuth 2.0 Client in GCP的部分。这将被命名为
Web client (auto created by Google Service)
此客户端自动链接到OAuth Consent Screen,您可以在其中提及应用程序的显示名称**,并将其限制为您组织中具有Google帐户的用户**
如果您的公司使用Email & Password登录
最简单的方法是立即通过firebase后台auth trigger
onCreate
检查组织电子邮件,如Ben的回答中所述。如果帐户不属于您的组织-立即删除它。这将 * 在很短的时间内 * 给予恶意用户访问您的系统。为了进一步保护,您可以将custom claim设置为您的组织用户(当他们在firebase函数中注册时)并确保每个对firestore/实时数据库的请求都检查了这些自定义声明。同样,您可以在调用数据库之前在firebase函数中检查自定义声明
oknwwptz2#
**情况1:**用户已创建账号,您希望将一个云功能限制到特定邮箱。
您可以获取与云函数调用相关联的用户信息,并检查他们的电子邮件。如果他们有正确的电子邮件域,您可以调用外部数据库。您还应该做一些UI更改,以便用户不会在没有
@cat.com
的情况下收到错误。**案例2:**限制Firebase项目中所有用户只能接收包含
@cat.com
的邮件?如果是这样的话,你不能直接在firebase认证中限制电子邮件,所以你必须在云函数后面粘贴用户注册代码,在那里创建用户帐户。
您可以在云函数中使用Firebase Admin SDK来完成此操作。docs
客户端将调用云函数与他们所需的电子邮件和密码,并在调用此
.createUser
,你可以检查正确的电子邮件,然后再创建用户与"dog@cat.com".toLowerCase().endsWith("cat.com")
。或者,您可以为用户设置自定义声明,如@frunkad所述:为使用“@ www.example.com”电子邮件注册的用户给予额外权限cat.com,如下所示:在用户创建时通过Firebase Functions定义角色。但是,在OP的情况下,只有具有“@cat.com”的用户才能注册,因此自定义声明会使问题过于复杂。
此外,使用电子邮件域作为访问控制的一种形式听起来不是一个好主意。在帐户创建过程中,您根据电子邮件手动添加对用户文档的访问权限。当您想给予某人一封电子邮件,但不想给他们数据库的访问权限时,会发生什么?
syqv5f0l3#
在你的firebase安全规则中粘贴这个
这对我很有效,我可以限制登录谷歌用户到我的组织域
tnkciper4#
从2022年8月起,您可以编写blocking functions,如果不满足某些要求,可以阻止用户创建帐户。链接的文档具体显示了这个示例:
要使用阻止函数,您需要使用Firebase Authentication with Identity Platform。