1

サーバー側の JavaScript 言語 jaggeryJS を使用して、Firebase 認証用の JWT を作成しようとしています。

以下、概説します

  1. JWT 作成への私のアプローチ
  2. フロントエンドの応答。

1 JWT 作成への私のアプローチ

HmacSHA256 関数は Google の CryptoJS ライブラリに由来し、Base64.encode は [こちら][3] で概説されていますが、2 番目のパラメーターを追加して Web セーフ エスケープを可能にします。

<%
//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("Login Failed!", error); } else { console.log("Login Succeeded!"); } });

コンソール出力:

ログインに失敗しました!エラー {コード: "INVALID_TOKEN"、スタック: (...)、メッセージ: "INVALID_TOKEN: 認証トークンを解析できませんでした。"}

シークレットを直接渡すと、正常に認証できます。どんな助けでも大歓迎です。ありがとうございました!

4

0 に答える 0