TIL. 8認定&承認


認証


簡単に言えば、ウェブサイトでユーザーを識別することです.

認証プロセスに必要

  • ID、パスワードメールなどがあります.
  • パスワードの暗号化

  • は、DBにパスワードで保存されません.
    1)ハッカーが侵入した場合、パスワードがそのまま露出する
    2)外部ハッカーでなくても,内部開発者や他の人が見ることができる.
  • パスワードは、ストレージを暗号化する必要があります.
    1)ハッカーが侵入した場合,パスワードは露出しない.
    2)内部開発者も不明である.
  • たんほうこうハッシュ

  • のパスワードを変換することで、 要約
  • の作成
  • のパスワードを知っていれば、暗号化されたパスワードは簡単に入手できますが、暗号化されたパスワードは元のパスワードを取得できません. 一方向性と呼ぶ.
  • Bcrypt


    一方的なハッシュにはいくつかの弱点がある.bcryptは、このような状況を防止するためにSaltingおよび
    これは、Key Stretchingを提供する典型的なライブラリです.
  • Salting
    ハッシュ値を計算する方法は、実際のパスワードのほかにランダムなデータを追加することもできます.
  • Key Stretching
    は、一方向ハッシュ値を計算した後、そのハッシュ値をハッシュし、それを繰り返すことを意味する.
  • 復号化

    hashed_password = bcrypt.hashpw(password.encode('utf-8'), bcrypt.gensalt())
    encode:stringタイプをbytesタイプに変換-エンコーディング
    decode:バイトタイプをstringタイプに変換-復号化
    <Bcrypt形式画像>

    暗号化パスワードが一致していることを確認する方法

    bcrypt.checkpw(request_password.encode('utf-8'),hashed_password)
    データベースに復号されたパスワードを表示すると、上の画像のようにbcryptパスワードが格納されます.要求されたパスワードが入力された後、上記のコードが入力されたときにハッシュ前のパスワードと同じであれば、True、そうでなければFalseが出力される.

    権限


    これは、ログインした人が追加サービスを使用するときにユーザーを許可しているかどうかを簡単に確認するステップです.

    JWT (Json Web Token)


    権限のあるプレイヤーかどうかを確認するために、コインを付与します.
    トークンを取得するには、DBのSECRET KEYを理解して接続する必要があります.

    トークンの作成

    access_token = jwt.encode({'id' : 1}, SECRET_KEY, algorithm = 'HS256')
    ログインに成功すると、 accesstokenという暗号化されたユーザ情報をrequestに送信します.
    #EX)
    
    POST /auth HTTP/1.1
    Host: localhost:5000
    Content-Type: application/json
    
    {
        "username": "joe",
        "password": "pass"
    }
    
    HTTP/1.1 200 OK
    Content-Type: application/json
    
    {
        "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZGVudGl0eSI6MSwiaWF0IjoxNDQ0OTE3NjQwLCJuYmYiOjE0NDQ5MTc2NDAsImV4cCI6MTQ0NDkxNzk0MH0.KPmI6WSjRjlpzecPvs3q_T3cJQvAgJvaQAPtk1abC_E"
    }
    上記のトークンはサーバ上にあります アクセスポイントを復号することによって、対応するユーザ情報が得られる.

    トークン復号

    jwt.decode(access_token, SECRET, algorithm = 'HS256')
    上記のように{'id': 1}を返す値を入力します.
    コインでプレイヤーを逆確認できます.
    JWTとは,名前の通り,ユーザ情報を含むJSONデータを暗号化してクライアントとサーバとの間で交換するものである.

    JWTは3種類からなる。



    1)タイトル(タイトル)
  • トークンタイプとハッシュアルゴリズム
  • を指定する
    2)コンテンツ(ペイロード)
  • 登録済み(登録済み)のクレーム-上記の
  • 公開(公開)クレーム-競合を回避するためにURI形式で使用
  • 非公開(プライベート)クレーム-上記2つのクレーム間(通常はクライアント<->サーバ)プロトコルで使用されるクレーム
  • 3)署名(署名)
  • ヘッダの符号化値とコンテンツの符号化値とをマージ後、所与の秘密鍵を用いてハッシュを行い、
  • を生成する.