我正在尝试使用服务器端 javascript 语言为 Firebase 身份验证创建 JWT:jaggeryJS。
下面我将概述
- 我创建 JWT 的方法
- 前端响应。
1 我的 JWT 创建方法
HmacSHA256 函数来自 Google 的 CryptoJS 库,Base64.encode 如 [此处][3] 所述,但添加了第二个参数以允许网络安全转义。
<%
//create a jwt
//==============================================
//INCLUDES
include('../lib/config.js');
include('../lib/crypto/hmac-sha256.js');
include('../lib/crypto/base64.js');
//==============================================
// HEADER
var header = {
"alg": "HS256",
"typ": "JWT"
}
//==============================================
// CLAIMS
var claims = {
"v": 0,
"iat": Math.floor(new Date().getTime() / 1000),
"d": {"user":"test"},
"exp": (60 * 60 * 24 * 60),
"admin": true,
"debug": true
}
//PREPARE SIGNING
var headerBase64 = Base64.encode(stringify(header), true),
claimBase64 = Base64.encode(stringify(claims), true),
signingInput = headerBase64 + "." + claimBase64;
//CREATE SIGNATURE
var hash = CryptoJS.HmacSHA256(signingInput, FIREBASECONFIG.secret).toString(),
signature = Base64.encode(hash, true);
//CONSTRUCT JWT ('jot') TOKEN
var jwtToken = signingInput + "." + signature;
print(jwtToken);
2 前端响应。
var dataRef = new Firebase(" https://intense-heat-2343.firebaseio.com ");
var AUTH_TOKEN = "...." //“jwtToken”上方打印的内容
dataRef.auth(AUTH_TOKEN, function(error) { if(error) { console.log("登录失败!", error); } else { console.log("登录成功!"); } });
控制台输出:
登录失败!错误{代码:“INVALID_TOKEN”,堆栈:(...),消息:“INVALID_TOKEN:无法解析身份验证令牌。”}
当我直接传递我的秘密时,我能够成功进行身份验证。任何帮助表示赞赏。谢谢!