Json web token(JWT)原理


JWT
  • 01、JWTとは何か:
  • 02、JWT作用:
  • 02-1、3特性
  • 02-2、マルチポイント上陸
  • 03、JWT実現原理
  • 03-1、jwtトークン(token値)は実は1文字列
  • 03-2、三段構成
  • 03-2.1最初の文字列を**ヘッダ**と呼ぶ
  • 03-2.2二段目文字列、**荷重**と呼ぶ
  • 03-2.3第3段文字列を**署名**と呼ぶ
  • 04、結語:
  • 01、JWTとは:
    Json web token(JWT)は、ネットワークアプリケーション環境間で宣言を伝達するために実行されるJSONベースのオープンスタンダードである(RFC 7519).このtokenはコンパクトで安全に設計されており,特に分散サイトのシングルポイントログイン(SSO)シーンに適している.JWTの宣言は、一般に、リソースサーバからリソースを取得するために認証されたユーザ識別情報をアイデンティティプロバイダとサービスプロバイダとの間で伝達するために使用され、追加の他のビジネスロジックに必要な宣言情報を追加することもでき、tokenは直接認証に使用され、暗号化されてもよい.
    02、JWTの役割:
  • データの整合性を確保!

  • 02-1、3つの特性
    JWTはトークンに相当し、このトークンは以下の3つの特性を備えている.
  • 0、トークンはバックエンドでユーザーに発行されている
  • 1、ユーザ識別情報の記録
  • 2、真偽が検証できる
  • 02-2、マルチポイント登録
    JWTという技術を使えば、マルチポイントログインを実現できます.
    マルチポイントログイン:クライアントは任意のサービス側がログインを完了した後、サービス側はトークン(token)を発行する.その後、ユーザーはこのトークンを使用して任意の他のサーバで認証を完了することができます!!
    03、JWT実現原理
    03-1、jwtトークン(token値)は実は文字列です
    token文字列は**「点」**で3つのセグメントに分かれています.そしてコードされています!
    "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ"
    

    03-2、三段構成
    03-2.1ヘッダ情報(header)と呼ばれる最初のセグメント文字列
    # python      
    header = {
      'typ': 'JWT', #   /  
      'alg': 'HS256' #     ,       token        
    }
    
    #               token       
    "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9"
    

    03-2.2荷重(payload)と呼ばれる2番目のセグメント文字列
    荷重情報は格納されたユーザー情報です!
    # python      ,      
    payload = {
      "username": 'haige',
    	"user_id": 1
    }
    
    #                 token        
    "eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9"
    

    03-2.3署名(signature)と呼ばれる3番目の文字列
    署名の役割はtoken文字列全体の真偽を検証することです!
    検証の論理:tokenを発行する時に1つの鍵を使って署名部分を生成し、ユーザーがtokenのheaderとpayload情報を修正した場合、鍵がないため、ユーザーは対応する第3部分の署名データを生成できない.私たちのバックグラウンドでは、ユーザーのヘッダーとpayloadを新しい署名に再署名しました.ヘッダーとpayloadが変更されていなければ、新しい署名と古い署名は一致しているはずです.
    #           
    # =======        ========
    #  1、 token        (   ),        “    ”
    message = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9"
    # 2、             ——            ,     
    secret = "FEWGHTrhty5hHY%HJ$uybyju46ju6juj5iu"
    # 3、    /            
    signature = HS256(message, secret)
    
    #         
    "TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ"
    
    
    # =======        ========
    token = "fewferwhjgbrehwgEGTTE.grbnehgbhtjuerw.gtrbwhguktbrhwgjktur"
    # 1、       token       
    header = "fewferwhjgbrehwgEGTTE"
    payload = "grbnehgbhtjuerw"
    signature = "gtrbwhguktbrhwgjktur"
    # 2、 header payload  ,    HS256            
    message = header + '.' + payload
    new_signature = HS256(message, secret)
    # 3、       ,              
    if signture == new_signature:
      #     
    else:
      #     
    

    04、締めくくり:
    個人記録、初心者入門、多くの学習、みんなの交流と検討を歓迎します!個人サイト:http://106.54.78.238/song_of _seaの個人サイトhttp://106.54.78.238/