如何在firebase身份验证中限制电子邮件域

a0zr77ik  于 2021-06-27  发布在  Java
关注(0)|答案(2)|浏览(469)

我有一个关于firebase身份验证的问题。实际上,我正在为我的公司制作一个 Jmeter 板,我将在firebase中主持它。我想限制电子邮件认证仅限于我的公司域名(例如:cat.com)。但我浏览了stackoverflow的答案,发现我可以在数据库中强加规则。但问题是,我将调用外部数据库fetcj数据使用firebase功能,并提供给网站( Jmeter 板)。因此,没有特定领域的规则将适用于那里。下面是我的 Jmeter 板架构的概要

我怎样才能做到这一点?我希望人们x@cat.com“将能够验证和查看 Jmeter 板数据

wsewodh2

wsewodh21#

如果您的公司通过“使用谷歌登录”使用gsuite和logins

firebase的google登录是建立在普通google登录的基础上的,其中的一个问题是当他们在gcp中创建一个新的oauth2.0客户端时。这将被命名为 Web client (auto created by Google Service)
此客户端自动链接到oauth同意屏幕,您可以在其中提及应用程序的显示名称,并将其限制为组织中具有google帐户的用户

如果您的公司使用电子邮件和密码登录

最简单的方法是通过firebase后台auth触发器立即检查组织电子邮件 onCreate 正如本在回答中提到的。如果该帐户不属于您的组织-请立即删除它。
这会让恶意用户暂时访问您的系统。为了进一步保护,您可以为您的组织用户设置自定义声明(当他们在firebase函数中注册时)&确保对firestore/real-time数据库的每个请求都检查了这些自定义声明。类似地,在调用数据库之前,可以在firebase函数中检查自定义声明

t3psigkw

t3psigkw2#

案例1:用户已经创建了自己的帐户,您希望将一个云功能限制为特定的电子邮件地址。
您可以获取与云函数调用相关联的用户信息,并查看他们的电子邮件。如果外部数据库具有正确的电子邮件域,则可以调用它们。您还应该做一些ui更改,这样用户在没有错误的情况下就不会出现错误 @cat.com .
案例2:限制firebase项目中的所有用户发送包含以下内容的电子邮件 @cat.com ?
如果是这样的话,你就不能在firebase身份验证中直接限制电子邮件,所以你必须在云函数后面添加用户注册码,在那里创建用户帐户。你可以在他们注册时查看他们的电子邮件。
您可以在云函数中使用firebase管理sdk来实现这一点。文件

admin.auth().createUser({
  email: 'user@example.com',
  emailVerified: false,
  phoneNumber: '+11234567890',
  password: 'secretPassword',
  displayName: 'John Doe',
  photoURL: 'http://www.example.com/12345678/photo.png',
  disabled: false
})
  .then(function(userRecord) {
    // See the UserRecord reference doc for the contents of userRecord.
    console.log('Successfully created new user:', userRecord.uid);
  })
  .catch(function(error) {
    console.log('Error creating new user:', error);
  });

客户端将使用所需的电子邮件和密码调用云函数,然后再调用此函数 .createUser ,并且您可以在使用创建用户之前检查正确的电子邮件 "dog@cat.com".toLowerCase().endsWith("cat.com") .
另外,使用电子邮件域作为访问控制的一种形式听起来不是一个好主意。在帐户创建过程中,您可以根据电子邮件手动添加对用户文档的访问。当你想给某人一封电子邮件,但不想让他们访问数据库时会发生什么?

相关问题