Firebase云功能中的SSL固定

时间:2018-11-28 16:58:44

标签: node.js firebase ssl google-cloud-firestore google-cloud-functions

我为我的用户和我正在构建的应用程序的管理员使用firebase云功能。我想检查谁在调用函数(https调用),以便我可以访问它们。 对于用户,我使用由firebase提供的令牌验证中间件,应用程序上的用户调用该函数并将其令牌添加到请求中...我使用中间件来检查令牌,如果可以,则可以继续使用firebase我的要求...

对于有些不同的管理员,他们没有应用程序,因此他们没有登录并且不能拥有令牌。因此,我考虑了一种方法:他们登录,生成一个令牌,该令牌将过期,并且他们将使用该令牌进行下一个请求(我将在自己的令牌中写入该令牌,并创建自己的中间件以对其进行验证。 )

我的问题是登录请求将在参数中发送管理员密码,我要做的是在管理员登录请求上添加ssl pinning,这样只有拥有此证书的人才能获得令牌。

在firebase中,您可以使用express,这样就可以创建一个api,如下所示:

const app = express()
const api = functions.https.onRequest(app)
module.exports = {
  api
}

然后我打电话给http://myadressonfirebase.com/api/

这样处理:

app.all(myUserPath, validateFirebaseIdToken, (req, res) => {
  myWorker.handleRequestForPath(req, res)
})

我要针对管理员的请求进行检查,请检查请求的ssl证书,并将其与我在服务器中拥有的证书进行“比较”(目前已自行签名)。看起来像这样:

app.all(administrationRequestPath, validateSSLRequest, (req, res) => {
  myWorker.handleAdministrationRequestForPath(req, res)
})

我找到了一些接近我想要的东西:https://www.npmjs.com/package/express-force-ssl

在此模块中,您可以检查某些请求的ssl ...问题是在创建服务器时需要添加一些选项:

var ssl_options = {
  key: fs.readFileSync('./keys/private.key'),
  cert: fs.readFileSync('./keys/cert.crt'),
  ca: fs.readFileSync('./keys/intermediate.crt')
};

var app = express();
var server = http.createServer(app);
var secureServer = https.createServer(ssl_options, app);

我不能这样做,因为它是创建服务器的Firebase ... 我只做:

const api = functions.https.onRequest(app)

请求被调用时,哪个会调用应用程序,所以我无法使用此模块... 您是否认为我可以管理ssl固定在云功能中,还是干脆找到一种中间件来检查请求证书到我存储在服务器路径中的证书?

非常感谢您的帮助。

0 个答案:

没有答案