フリーランス 技術調査ブログ

フリーランス/エンジニア Ruby Python Nodejs Vuejs React Dockerなどの調査技術調査の備忘録

expressでjsonwebtokenとbcryptで利用してセキュリティ回りライブラリを検証した件

今回利用するライブラリは下記の3つとなります

npm install jsonwebtoken
npm install bcrypt
npm install config

パスワード暗号方法

 const bcrypt = require('bcrypt');
 const saltRounds = 10;
// フォーム画面で入力されたパスワード
const myPlaintextPassword = 's0/\/\P4$$w0rD';

 let someOtherPlaintextPassword = ""
 bcrypt.hash(myPlaintextPassword, saltRounds).then((hashPasswor) =>{
  // 暗号化されたパスワードがhashPassworに代入されるので、DBに登録するなどしてください。
    someOtherPlaintextPassword = hashPasswor
 });

パスワードと暗号化したデータを比較する

暗号化されたデータと暗号化されていないデータが正しいか比較する処理です。myPlaintextPasswordが暗号化していない値になっており、someOtherPlaintextPasswordが暗号化されているデータを入れて比較します。比較した値はisCorrectPasswordに入り、true or falseで値が返ってきます。

  bcrypt.compare(myPlaintextPassword, someOtherPlaintextPassword ).then((isCorrectPassword) => {
      console.log(isCorrectPassword);      
  });          

ログイン認証後にトークンを生成する方法

var config = require('config');
var jwt = require('jsonwebtoken'); 

## tokenを生成する
## expiresInはトークンの有効期限を指定します。
var token = jwt.sign({email: "<フォームで入力したメールアドレス>",password: "<フォームで入力したパスワード>"}, config.secret_key, { expiresIn: '1h' });

secret keyは設定ファイルに記述した内容を利用しております。設定ファイルは「config/default.json」というファイルを作成して下記のように記述します。

{
    "secret_key": "hogehoge" 
}

トークンの有効チェック

try { 
  jwt.verify(token, config.secret_key);
} catch(err) {
  return {error: 'エラー!!!'}
}

まとめ

  • 過去にブログでまとめたpassportと上記の情報とを組み合わせてログインフォームとユーザー登録を作成していきたいと思います。