生活キャンプ(5週目)


  • キャンプの誘導の詳細については、次のリンク[1]を参照してください.
  • API開発の過程で,以前作成したAPIリストのエラー部分が見つかった.いくつかの事項はすでに修正されており、Provider/serviceまたはDAO部分もサーバ上の不要な部分を再パッケージしています.そして、今回はJWTを使って会員登録と登録を行います.

    📖 に質問


    - Cookie, Session & JWT


    ログイン方法とValidationの開発について

    📝 n/a.ターゲット


    -取引

  • 事務概念
  • DAOトランザクション
  • - JWT

  • 認証トークン概念
  • JWT API開発
  • - OAuth

  • SNS登録
  • OAuth API開発
  • ▶▼開発ログ


    1.授業内容を整理する


    1)HTTP特性

  • Stateless:現在のステータスまたはデータは保存されません.
  • ログインまたはユーザー認証の場合、ステータスを保存せずに毎回認証を行う必要があります.
  • 2)会話とCookie

  • セッションは、クライアント情報をサーバ側の一時リポジトリに格納します.
  • Cookieクライアントストレージサーバ上の情報.
  • Webキャッシュは、応答時間を最小化するために、アクセスサイトの情報を含む.
  • 3) JWT

  • セッションとCookieの利点を追加し、毎回認証を行いますが、認証情報を直接送信または受信しません.
  • クライアントがサーバに認証要求を発行すると、サーバはJWTを介してクライアントに送信される.
    クライアントは、自分のリポジトリにトークンを格納します.
    クライアントが次の要求を必要とする場合、ストレージトークンを使用してサーバから応答を受信し、追加の検証を必要としません.
  • Header、Payload、Signatureとして構成されています.
  • Header:符号化
  • Payload:ユーザーを区別して失わない情報を格納
  • 署名:ヘッダーとPayloadの符号化値.Secret Key値の保存
  • 4)取引

  • Commit:クエリーを作成し、データベースに変更を反映する
  • Rollback:データベースの変更を取り消す
  • DBの作業を組み合わせて使用します.
  • 主に、POSTまたはPATCHなどのクライアントおよびサーバが反映すべきでない、または反映すべきでない場合に使用される.
  • 2.取引


    1)概念と特徴

  • トランザクションの核心は、データベース内のいくつかのコマンドがデータベースにすべて反映されているか、またはすべて反映されていないことです.
    簡単に表現するには、下図のように回転ドアで表示します.
  • 各回転格子をトランザクションとして使用すると、コマンドの数にかかわらず、トランザクションが右側に適用されるか、左側にすべて適用され、左側に戻ります.
  • また、回転ドアが1つの格子に分割されているように、トランザクションは互いに干渉せず、独立して動作します.
  • トランザクションをデータベースで変更されたコマンド:Insert、Update、Deleteに適用します.
    検索に失敗してもデータベースは変化しないため、Selectは適用されません.
  • 2)応用

  • Node.jsのmysqlモジュールは、トランザクションを簡単に適用できる方法を提供します.
  • JavaScriptのasync/await構文と並行するトランザクションを使用して、次のように使用できます.
  • async transactionFuction(parameter1, parameter2, parameter3) {
      // mysql 커넥션 풀 생성
      const connection = await pool.getConnection(async (conn) => conn);
      
      try {
        // 트랜잭션 시작!
        await connection.beginTransaction();
        
        // insert, update, delete 명령 실행
        await insertSomething(parameter1);
        await updateSomething(parameter2);
        await deleteSomething(parameter3);
        
        // 트랜잭션 커밋!
        await connection.commit();
        
        return 'success!'
      } catch (error) {
        // 에러 발생하면 롤백!
        await connection.rollback();
        
        return error;
      } finally {
        // 커넥션 풀 해제
        connection.release();
      }
    }
  • beginTransactionメソッドはトランザクションを開始します.
    commitメソッドは、すべてのコマンドを実行した後にコミットを開始します.
    rollbackメソッドは、エラーが発生したときにロールバックを開始します.
  • 3. JWT


    1)認証プロセス

  • JSONWeb Tokenの略で、電子署名のJSONです.
  • サーバとクライアント間で情報交換を行う場合、HTTP Request HeaderにJSONタグを入れると、サーバはJWTの情報を使用して検証
  • Tokenにはユーザーを識別できる情報しか含まれていません.絶対!パスワードはコインに入れてはいけません.JWTが盗まれると、内容が見えやすくなるからです.
  • JWTの認証フローは以下の通りである.(コンテンツソース[2])
  • 2)JWTリリース

  • Node.jsのモジュールでjsonwebtokenを使用してJWTが発行されました.リリースは、クライアントがログイン要求を送信したときに完了します.
  • const jwt = require('jsonwebtoken');
    
    const token = asycn function(userIdRows) {
      return await jwt.sign(
        	{
        	// payload에 넣을 내용
            userId: userIdRows[0]
            },
        	// secret key 설정
            'secret_key_blahblah!!',
            {
            expiresIn: '365d',
            subject: 'userInfo'
            }
      );
    }

    3)JWTチェック

  • クライアントに送信されたJWTを使用してサーバへのアクセス制御を行うには、ユーザーが正しいかどうかを確認するために、JWTを再度チェックする必要があります.
  • Expressフレームワークの主な機能は、ミドルウェアによってJWT確認を実現し、要求を処理することです.ミドルウェアコードを直接アップロードするのは難しいので、確認中に一部だけ添付しました.
  • const jwt = require('jsonwebtoken');
    const token = req.headers['jwtValue'];
    
    const checkJWT = async function() {
      await jwt.verify(jwtValue, 'secret_key_blahblah!!', (err, chekcedToken) => {
        if (err) throw err;
        return checkedToken;
      });
    }

    4. OAuth

  • OAuthは、サーバではなくサードパーティサーバを介してユーザ情報を直接管理する方法である.
  • OAuthからまだサーバに適用されていません😟 ExpressとOAuthの内容についてはまだ理解が足りないと思うので、もっと知識を積んでから挑戦したいと思います!

    &リンクバー


    [1] : キャンプ場
    [2] : JWTとは?