首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >我是否安全地使用Firebase IDToken验证数据?

我是否安全地使用Firebase IDToken验证数据?
EN

Stack Overflow用户
提问于 2020-03-19 09:17:18
回答 1查看 70关注 0票数 0

我正在用react做一个web应用。对于身份验证,我使用了firebase auth,而对于数据存储,我使用了postgresql的express后端。

目前,为了从我的后端检索用户数据,我正在发送当前用户的idToken (由firebase提供)。然后在我的后端,我用firebase sdk验证idToken。这足够安全了吗?

在未来,我将添加支付功能。验证使用firebase idToken付款的用户,然后接受付款是否足够安全?

我绝对是安全方面的新手!

下面是获取/更新和创建新用户的方法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
   const getUserById = (request, response) => { //Dammi l'utente con il tokenID passato
    const idToken = request.params.idToken
    utils.firebase.auth().verifyIdToken(idToken)
      .then(function(decodedToken){
        let uid = decodedToken.uid

        utils.pool.query('SELECT * FROM users WHERE uid = $1', [uid], (error, results) => {
          if (error) {
            throw error
          }
          response.status(200).json(results.rows)
        })
      }).catch(function(error) {
        // Handle error
      });
  }



const createUser = (request, response) => { //Crea nuovo user
    const { idToken, fullname} = request.body

      utils.firebase.auth().verifyIdToken(idToken) //Verifico il token utente in ingresso
        .then(function(decodedToken) { //se è verificato allora estraggo l'uid
          let uid = decodedToken.uid;
          console.log("Registered new User, UID: " + uid)
          console.log("name: " + fullname)
          utils.pool.query('INSERT INTO users (uid,fullname) VALUES ($1, $2)', [uid, fullname], (error, results) => {
            if (error) {
              throw error
            }
            response.status(201).send(`User added with ID: ${results}`)
          })
        }).catch(function(error) {
          // Handle error
        });
  }


  const updateUser = (request, response) => { //Aggiorna le info dell'utente, nome e biografia, l'email verrà gestita da firebase
    const idToken = request.params.idToken
    const { fullname, bio } = request.body

    utils.firebase.auth().verifyIdToken(idToken) //verifico che il token sia vero
    .then(function(decodedToken){
      let uid = decodedToken.uid //estrapolo lo uid dell'utente
      console.log("Edited the user: " + uid)
      console.log("Name: " + fullname)


      utils.pool.query(
        'UPDATE users SET fullname = $1, bio = $2 WHERE uid = $3', [fullname, bio, uid], (error, results) => {
          if (error) {
            throw error
          }
          response.status(200).send(`User modified with ID: ${results}`)
        }
      )
    })
  }

如果有安全问题,有人能给我解释一下吗?安全推送webapp + nodejs在生产中的最低安全规则是什么?

EN

回答 1

Stack Overflow用户

发布于 2020-03-19 13:42:41

通过快速扫描您的代码,getUserById在我看来是正确的。你采取的关键步骤:

  1. 您将验证ID令牌是否有效。

由于令牌是使用客户端上项目的公钥签名的,只有您才能使用服务器上相同的项目凭据对其进行解码,这确保了用户不会只向您发送任何旧值。

  1. 然后使用UID from this ID标记从数据库中检索该用户的数据。

当然,这一步取决于您实际希望在应用程序中允许的内容,但乍一看,这看起来很正常。它相当于Firestore安全规则中的检查:request.auth.uid == resource.data.uid.

您的createUser方法在处理ID令牌的方式上看起来非常相似。我要标记的唯一一件事是从请求体中获取fullname,这意味着用户可以在其中传递任何他们想要的值。如果这正是您想要的,那么代码就是您想要的。但是,如果您试图获取用户的显示名称,您可能也希望从他们的ID标记中获取该名称,就像您处理UID一样。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60754063

复制
相关文章
iOS Facebook和Google登录
      最近在对接完Google和Facebook登录之后准备对这部分内容做一个小小的总结,方便以后有需要的时候查看。
Mr.RisingSun
2022/12/07
1.4K0
iOS Facebook和Google登录
jwt token 鉴权验证 【firebase 5.x】
JWT全称: JSON Web Token,以 token 的方式代替传统的 cookie、session 模式,用于各服务器、客户端传递信息及签名验证
很酷的站长
2022/12/31
2.9K0
jwt token 鉴权验证 【firebase 5.x】
firebase怎么用_firebase是什么
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/168361.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/20
4.2K0
firebase怎么用_firebase是什么
验证form表单提交数据是否合法
表单还可以包含 menus、textarea、fieldset、legend 和 label 元素。
OECOM
2020/07/02
2.4K0
laravel 中使用tinker 验证驱动加载是否成功
在验证laravel 中 InvalidArgumentException Driver [WeiBo] not supported.
全栈程序员站长
2022/07/07
5810
laravel 中使用tinker 验证驱动加载是否成功
App Google一键登录
其实所有的第三方登录都是基于OAuth协议的,大多数平台都支持OAuth2.0,只有Twitter的是基于OAuth1.0来做的。
Java king
2023/02/23
5.3K1
Mac中安全地使用rm命令
.example_responsive_1 { width: 200px; height: 50px; } @media(min-width: 290px) { .example_responsive_1 { width: 270px; height: 50px; } } @media(min-width: 370px) { .example_responsive_1 { width: 339px; height: 50px; } } @media(min-width: 500px) { .example_responsive_1 { width: 468px; height: 50px; } } @media(min-width: 720px) { .example_responsive_1 { width: 655px; height: 50px; } } @media(min-width: 800px) { .example_responsive_1 { width: 728px; height: 50px; } } (adsbygoogle = window.adsbygoogle || []).push({});
草堂笺
2019/12/20
1.9K0
使用java连接AD域,验证账号密码是否正确
web项目中有时候客户要求我们使用ad域进行身份确认,不再另外做一套用户管理系统。其实客户就是只要一套账号可以访问所有的OA,CRM等办公系统。 这就是第三方验证。一般有AD域,Ldap,Radius,邮件服务器等。最常用的要数AD域了。因为window系统在国内占据了大量的江山。做起来也很方便。 我这篇文章就是写,如何用java去实现AD域的身份验证。好了,直接看代码吧:
业余草
2019/01/21
2.8K0
使用java连接AD域,验证账号密码是否正确
Firebase 如何创建登录 Token
Firebase 的 token 可以使用 firebase 命令行工具来进行创建。
HoneyMoose
2021/04/02
2.5K0
Firebase 如何创建登录 Token
[LeetCode]Valid Parentheses 验证括号是否有效闭合 [LeetCode]Valid Parentheses 验证括号是否有效闭合
链接:https://leetcode.com/problems/valid-parentheses/#/description 难度:Easy 题目:20. Valid Parentheses Given a string containing just the characters ‘(‘, ‘)’, ‘{‘, ‘}’, ‘[‘ and ‘]’, determine if the input string is valid. The brackets must close in the correct order, “()” and “()[]{}” are all valid but “(]” and “([)]” are not.
尾尾部落
2018/09/04
8290
[LeetCode]Valid Parentheses 验证括号是否有效闭合
		
			[LeetCode]Valid Parentheses 验证括号是否有效闭合
Android Firebase 服务简介
Firebase初步了解 什么事Firebase? Firebase成立于2011年,在被Google收购之前,Firebase是一个协助开发者快速构建App,能够提供行动应用专用开发平台及SDK的一款产品,简单的说大概就是一套集成后台服务工具。早在2014年,谷歌收购了Firebase,这主要是一种面向应用程序开发人员的数据库。Firebase基本上向广大的应用程序开发人员提供不同的服务,比如存储、消息传递、通知和身份验证等服务。 在今年的I/O大会上,谷歌发表了新版的Firebase,新的Firebas
xiangzhihong
2018/02/05
22.9K0
Android  Firebase 服务简介
如何快速准确的验证QQ邮箱是否开通,是否存在?
QQ是国内比较大的公共邮箱之一,做国内邮件营销的企业,无法避免需要做QQ邮件营销。既然是比较大的公共邮箱,那么群发邮件到达收件箱的难度也是比较有挑战性的。
用户2411043
2019/03/03
4.2K0
Oracle数据库验证IMP导入元数据是否会覆盖历史表数据
场景:imp导入数据时,最终触发器报错退出,并未导入存储过程、触发器、函数。 现在exp单独导出元数据,然后imp导入元数据,验证是否会影响已导入的表数据。
Alfred Zhao
2019/05/24
1.5K0
Google 的 Firebase 如何删除项目
https://www.ossez.com/t/google-firebase/13792
HoneyMoose
2021/11/02
3.2K0
Google 的 Firebase 如何删除项目
SwiftUI 与 Core Data —— 安全地响应数据
保证应用不因 Core Data 的原因导致意外崩溃是对开发者的起码要求。本文将介绍可能在视图中产生严重错误的原因,如何避免,以及在保证视图对数据变化实时响应的前提下如何为使用者提供更好、更准确的信息。由于本文会涉及大量前文中介绍的技巧和方法,因此最好一并阅读。
东坡肘子
2022/12/16
3.3K0
SwiftUI 与 Core Data —— 安全地响应数据
Python 快速验证代理IP是否有效
有时候,我们需要用到代理IP,比如在爬虫的时候,但是得到了IP之后,可能不知道怎么验证这些IP是不是有效的,这时候我们可以使用Python携带该IP来模拟访问某一个网站,如果多次未成功访问,则说明这个代理是无效的。 代码如下:
cutercorley
2020/07/23
9770
点击加载更多

相似问题

通过Python验证Firebase idToken

10

如何验证idToken是否有效

12

通过Firebase登录Facebook。我应该验证Facebook访问令牌和Firebase IdToken吗?

113

在idToken中验证Azure idToken

10

如何在nodejs后端验证Google (通过Firebase) idToken?

23
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文