使用Firebase处理客户端授权

时间:2018-04-21 17:01:54

标签: javascript firebase firebase-authentication firebase-admin

我正在构建一个使用Firebase,Firebase JavaScript SDK,Firebase身份验证服务和实时数据库以实现持久性的客户端。

根据许多不同的来源,我认证的工作正常,但我发现有限的选项可用于我认为有效的解决方案。

想要做的是将role: 'admin'的单个键/值附加到用户的身份验证记录,这样我就可以只使用一个客户端进行身份验证和授权基于Firebase后端的呼叫。

  • 我已经阅读了有关将自定义声明附加到Firebase身份验证记录的信息,但我只看到使用Firebase管理库(后端)的人员设置令牌并解析令牌。我试图不通过Firebase功能或自定义Express服务器添加额外的呼叫,如果我可以提供帮助的话。

  • 将单独的用户个人资料记录添加到RTDB很简单,我可以在那里存储身份验证数据。但是,这将始终需要同时调用身份验证和授权,这再次看起来非常低效并且排除了客户端的安全脱机使用(如果角色在RTDB上发生更改)。

  • 进行基于客户端的身份验证调用似乎效率低下,然后触发强制性的第二个基于客户端的调用,以从可实施Firebase管理的Firebase功能(或任何其他后端服务)中检索授权数据库。

主要问题:有没有办法使用JavaScript来实现从Firebase身份验证服务设置/检索身份验证和授权数据的目标,只需要一个请求到后端并在客户端上进行处理?

1 个答案:

答案 0 :(得分:1)

您提供的两个选项是自定义角色的惯用方法。

  • 如果您将角色作为自定义声明嵌入用户的令牌中,您将在身份验证请求中获取该角色。由于这是一项提升权限的操作,因此应该在受信任的环境中完成,例如您控制的服务器,云功能,或者(如果不经常)您的开发计算机。

  • 如果您不想这样做,并希望将其存储在数据库中,则需要额外的请求。该调用的开销通常不是性能问题。

两者的组合也是可能的:手动识别初始“系统管理员”UID,然后在数据库安全规则中使用它以允许向其他用户授予其他权限。但那也将在数据库中扮演角色。

我没有找到不使用这些惯用方法的理由,而是建议实施一个,看看你的问题是否在实践中浮出水面。