使用JSON Web令牌和Firestore支持Bearer令牌

时间:2018-07-09 08:45:14

标签: authentication authorization jwt google-cloud-firestore bearer-token

我希望在使用与Firestore对话的node.js应用程序时在Firestore中获得身份验证和授权支持。用户通过URL(带有嵌入式令牌的http.get)进行交互,并且与node.js应用程序进行交互。该应用接受用户的一些输入,然后与Firestore进行对话。客户端执行安全活动所需的访问令牌都嵌入在GET URL中(id +访问令牌)。

我在这里有一个流程,想验证该流程是否正确或我缺少什么?我找不到最明确的文档,可以指导我进行后续操作。

首先,我先生成JWT令牌部分,然后再生成GET网址: 用于生成JWT令牌的函数如下: //生成JWT令牌

function getJWT() {
  var token = jwt.sign({
    exp: Math.floor(Date.now() / 1000) + (60 * 60) * constants.JWT_TOKEN_VALIDITY_HOURS,
    admin: '​XXXXXXX'
  }, constants.JWT_SECRET_TOKEN);
  return token;
}

承载者令牌:我在很多论坛上都听说过,我有可能在授权标题中将此JWT Web令牌作为“承载者令牌”发送。这意味着Firestore神奇地为我完成了所有授权。我还要做什么?

1)我相信我需要使用此自定义JSON Web令牌登录并获取ID令牌。那是对的吗? 从Firebase Client SDK登录 使用Firebase Auth REST API将自定义令牌交换为ID令牌。 2)然后,当我以设置为Bearer {YOUR_TOKEN}的Authorization标头进行数据库访问请求时,需要将此ID令牌(不是JSON Web令牌)传递给Cloud Firestore端点。然后,您可以访问Firestore REST API带有结果ID令牌: https://firebase.google.com/docs/firestore/use-rest-api#working_with_firebase_id_tokens

想象一下,我还使用从Firestore获得的JSON访问令牌或ID令牌将承载令牌也嵌入到标头中

return this.http
.get(${OUR URL to app}, {
headers: new HttpHeaders().set('Authorization', Bearer ${JSON Web accessToken or ID Token})
})​

用户单击具有此访问令牌的URL。他们同意条款和条件,然后我将其重定向到进行一些处理的云函数中。这个JSON Web令牌被传递了。我也使用此代码验证了JWT令牌以用于身份验证。

function verifyToken(token) {
  try {
    var decoded = jwt.verify(token, constants.JWT_SECRET_TOKEN);
    var admin = decoded.admin;
    if (admin == "​XXXXXXXXX") {
      return true;
    }
    return false;
  } catch (err) {
    console.log(err);
    return false;
  }
}

与此相关的任何示例都会有帮助。

我使用的

相关链接 https://firebase.google.com/docs/firestore/use-rest-api#working_with_firebase_id_tokens

Firestore Custom Tokens

https://auth0.com/blog/how-to-authenticate-firebase-and-angular-with-auth0-part-1/

最后 https.onCall的协议规范 在https://firebase.google.com/docs/functions/callable-reference

可选:授权:承载 发出请求的登录用户的Firebase身份验证用户ID令牌。后端会自动验证此令牌,并使其在处理程序的上下文中可用。如果令牌无效,则请求被拒绝。

1 个答案:

答案 0 :(得分:1)

这是我从Google收到的正式回复(但仅在用户提出身份验证请求时才有效-我认为这是有效的Firebase用户),但是我想知道的是使用Json Web令牌本身实现这样的目标。

  

请澄清一下,您将需要Firebase ID令牌或Google   身份OAuth 2.0令牌将传递到Cloud Firestore   端点作为设置为承载{YOUR_TOKEN}的授权标头。

     

您可以在以下链接上获得有关此内容的更多信息:

  1. REST API Firestore authentication with ID Token
  2. https://firebase.google.com/docs/firestore/use-rest-api#authentication_and_authorization
  

此外,我们没有与此相关的任何示例,但是有一个   内部要求以改进我们的REST文档。我将无法   与您分享何时可以实现的任何详细信息或时间表,   但是,您可以留意我们的发行说明或Firebase博客   对于我们可能有的任何更新。

我希望在stackoverflow中可以获得更多与此相关的示例。但是现在这就是我所拥有的。