在不影响安全性的情况下使用firebase Idtoken代替自定义令牌

时间:2018-01-31 06:19:32

标签: firebase firebase-realtime-database firebase-authentication google-cloud-functions

我有以下用例:

  • 我有可以通过HTTP端点访问的云功能,他们使用自定义令牌授权,因为应用程序只能通过存储在RTDB中的某些IP访问,因此我创建了一个云功能,在使用用户登录后会生成自定义令牌firebase客户端SDK,然后在检查存储在RTDB中的IP后,使用admin SDK创建自定义令牌。
  • 现在每个后续呼叫客户端都会发送令牌,功能将为请求提供服务。
  • 我在客户端绑定了RTDB的事件监听器,并使用客户端SDK使用客户端SDK进行文件上传,客户端SDK使用firebaseApp.auth().signInWithCustomToken(custom token)进行初始化。
  • 在功能方面,我在使用我的firebase SDK的方法中使用相同的符号,然后我提供该请求。这里的问题是这个方法中的标志非常慢,就像它只在登录时通常超过1秒。

替代

现在替代方案是我可以使用id令牌,它可以在客户端本身使用currentUser.getIdToken()创建,解码该令牌只需要几毫秒,但我无法使用该令牌初始化SDK。所以我必须使用管理员SDK但RTDB中的我的IP节点不能被普通用户访问,并且只能通过管理员SDK访问,所以如果我使用带有自定义声明和安全规则的控制访问的ADMIN SDK来为管理员SDK提供类似的访问权限然后授权用户将无法访问IP节点。

ID令牌问题

Id令牌可以在客户端刷新,因此一旦客户端拥有自定义令牌,它就可以生成它想要的任意数量的令牌,这是不可取的。除了验证IP每次都不是我想用自定义令牌做的操作我只使用它来生成自定义令牌然后用于刷新令牌但使用id令牌,这是不可能的,因为客户端可以生成它使用SDK。

基本上,我必须在客户端使用firebase SDK,这需要自定义令牌(用于额外的授权检查)进行初始化,同时我从类似应用程序调用clound函数,这样才能实现最佳实现方式这个用例。

0 个答案:

没有答案