问题: 由于立法,我 在欧盟内存储个人信息(社会安全号码)。因此,我无法将此信息存储在Firebase中,因为在使用Google的云服务时无法保证地理数据中心的位置。
我建议的解决方案: 拥有Redis密钥值存储区,其中包含可通过简单的REST API访问的敏感信息,其中使用用户ID令牌实现用户身份验证,通过HTTP标头发送。
Firebase允许通过NodeJS库中的verifyIdToken
方法验证用户。这样我就可以检查用户ID是否与我的Firebase /admin
端点中的任何用户ID匹配。 (或者我可以硬编码允许进入服务器的用户ID,因为没有那么多。)
因此,请求的流程如下:
用户使用Firebase SDK在客户端登录。
每当用户需要访问敏感信息时,它首先获取用户的ID令牌
let currentUser = FIRAuth.auth()?.currentUser
currentUser?.getTokenForcingRefresh(true) {idToken, error in
if let error = error {
return
}
let headers = [
"X-FBUser-Token":idToken
]
//build request here to https://myServer.com/myEndpoint
}
然后服务器端我们将检索请求
app.get('/myEndpoint', function(req, res) {
let idToken = req.get('X-FBUser-Token')
verifyToken(idToken, function(isAdmin){
if (isAdmin) {
//Fetch the key value pair and send it back to the client here
}
})
})
function verifyToken(idToken, cb) {
firebase.auth().verifyIdToken(idToken).then(function(decodedToken) {
var uid = decodedToken.sub;
firebase.database().ref('admins/' + uid).on('value', function (snap){
cb(snap.val() !== null)
})
}).catch(function(error) {
// Handle error
});
}
然后客户端会收到回复并处理它。一切都通过HTTPS ofcourse完成。
注意:我知道上面的代码相当粗糙,需要一些改进,但希望你能得到这个概念
我的问题: