2017-02-18 123 views
1

我正在构建一个服务器路由,我希望限制它仅供经过身份验证的用户使用。我打算发送一个带有POST的user.uid到这个路由,并且我想验证UID是否存在于Firebase中。我知道我可以在Firebase中手动添加UID并检查这些数据,但是有可能看到Firebase身份验证跟踪哪些UID?我认为这种方法会比我自己的清单更好。有没有办法确定Firebase用户的UID是否有效?

这样做的目的是为了确保这些路由不会被伪造的UID访问(例如为了恶意目的)。

回答

1

您可以使用服务器上的Firebase Admin SDK检查特定的UID是否与项目中的Firebase身份验证用户相对应。从Firebase documentation on retrieving user data

admin.auth().getUser(uid) 
    .then(function(userRecord) { 
    // See the UserRecord reference doc for the contents of userRecord. 
    console.log("Successfully fetched user data:", userRecord.toJSON()); 
    }) 
    .catch(function(error) { 
    console.log("Error fetching user data:", error); 
    }); 
+0

这正是我所需要的。 – skwny

0

甲UID是当火力地堡用户被认证到火力地堡和为空当用户没有被认证的有效载荷的一部分。用户身份验证后可以获得UID。语法取决于什么框架你工作是不同的

检查出具体的语法和示例的火力地堡API参考:https://firebase.google.com/docs/reference/

1

验证一个UID不足以阻止恶意用户:1)攻击者可以通过发送其他用户的UID伪装成其他用户,以及2)UID永远不会更改或过期,这意味着无法强制用户(或攻击者)重新进行身份验证。

您需要的是将Firebase令牌从客户端应用程序传递到您的服务器,并在接受令牌之前对其进行验证。

  • 令牌由Firebase私钥进行安全签名。没有其他方可以发布有效的Firebase令牌。

  • 令牌只有一个小时有效。在发布新令牌之前,Firebase服务器将检查帐户状态(例如密码更改事件)。

  • 令牌有效载荷包含UID和观众。你应该验证观众是你自己的应用程序。

您可以使用管理员火力地堡的SDK或第三方库来验证火力地堡令牌。详情请参阅Firebase doc

+0

这当然是一个更好的方法。我会用这种方法,而不是什么我本来考虑。 – skwny

相关问题