[HTTP]http-認証/認証(1)について


📍 http-認証/認証の詳細
前回[httpについて]記事では,秘密鍵/公開鍵,関連アルゴリズム,SSLについて簡単にまとめた.
ちょうど今日午前中に認証/承認に関する会議を行い、内容を整理しました.
1
MarketColleyで買い物をする場合は、まず会員に加入しなければなりません.
私の口座はMarketColleyデータベースに保存されています.
登録後、商品を購入することができます.
私のパスワードは重要な個人情報なので、サーバーはそのまま保存するのではなく、暗号化してから保存します.このときhash関数を使用します.
  • hash 함수生成digest(一方向性)
  • オリジナル情報さえ分かればダイジェストがわかる
  • ただしdigestを知っていても元の情報は分からない
  • ただしhash 함수最終的にはサマリーデータも生成されるので安全ではありません.だから余分な任務はsaltingkey stretching
  • salting:ハッシュを追加するための追加のランダムデータを生成する操作
  • key stretching:生成されたダイジェストにhash操作を加え、元のデータを取得しにくくする(攻撃者がレインボーテーブルを作成するのは難しい

  • これにより最終的なhash値が得られ、最終的にデータベースに保存されます.これにより,サーバはhash値でユーザを識別できる.これはAuthentication(認証)です.
    2
    httpは無状態のままなので、一度ログインしてもhttpはずっと覚えていません.しかし、私たちは再ログインしません.
    このとき用いられる概念はaccess tokenであり、それを発行する各種技術の一つがJWT(JSON Web Token)である.

    仮にMarketColleyに会員登録してログインしたとします.
    この場合、サーバはログイン成功を通知し、/457914、
    私は今からこのトークンを使用してサーバに要求(API呼び出し)を発行し、サーバはこのトークンを復号することによって私の情報を検証し、アクセスを許可します.
    #나의 token을 복호화하면, id가 1번으로 등록되어 있는 user임을 확인함  
    {
        user_id = 1 
    }
    私は権利があることが確認されたので、処理の返事をもらいました.権限がない場合、サーバは401などのエラーを返します.これはaccess token(承認)コースです.
    djangoでは、bcryptというライブラリを使用して、これらの認証/認証操作を解決できます.
    (22032 update)JWTは、header/payload/signantからなる

    ヘッダにはhash/tokenのタイプとhashアルゴリズム情報が含まれています.
    ペイロードには、ターゲット、発行者、有効期限などの情報が含まれます.
    (ペイロードコンテンツでもエンコードのみなので、決して露出できない情報は入れません)
    署名には、サーバが提供する秘密鍵が含まれます.したがって、この部分はサーバを復号するしかありません.(DjangoではSECRET KEY)
    (220322 update)
    ペイロードとは、送信されたデータを指し、正確にはheader/metaデータを除く.
    {
        "status":"OK",
        "data": {
          	#payload는 아래 메세지라고 할 수 있다. 
            "message":"Hello, world!"
        }
    }
    最後に、SSLは、これらのクライアントサーバ間の通信が不明瞭になるように、セッション層を再保護することができる.
    (SSL証明書はCAから取得する必要があります!)
    コメントサイト
    :https://pypi.org/project/PyJWT/,pyjwt公式文書
    : https://ko.wikipedia.org/wiki/%ED%8E%98%EC%9D%B4%EB%A1%9C%EB%93%9C_(%EC%BB%B4%ED%93%A8%ED%8C%85 )
    : https://bcp0109.tistory.com/321