python token解析の実装


  • 生成条件HTTPは無状態のプロトコルであり、このプロトコルはユーザのアクセス状態を記録することができず、その要求のたびに独立した無関連であり、我々のウェブサイトは複数のページに設計されているので、我々の各ページはユーザのアイデンティティ認証
  • を必要とする.
  • cookieサーバは、ブラウザがCookie(携帯電話のほとんどのブラウザなど)をサポートしないか、Cookieを無効にすると、Cookie機能が無効になり、ドメイン間アクセス
  • を実現するのに不利になります.
  • tokenクライアントはTokenを受信した後、CookieやLocal Storageに保存することができます.tokenは3つの部分から構成されています.最終的なフォーマットはheader.payload.signature
  • と似ています.
  • flaskフレームワークtokenアプリケーションpipインストールFlask-JWT-Extended=3.16.0インストールパッケージを使用するとcreate_access_tokenとcreate_refresh_tokenとget_jwt_identityという3つのpythonが持参した方法
    from flask_jwt_extended import create_access_token, create_refresh_token, get_jwt_identity
    def encode():
    	id = utils.uuid_generator()
    	token = create_access_token(identity=id)
    
    # create_access_token:    id,jti,expire jwt         ,  expire   flask   app.config   ,   yaml   ,   app.config
    # create_refresh_token:  
    
    from flask_jwt_extended import decode_token
    
    #         token    ,  jti,token_type,expire     
    def decode(token):
    	payload = decode_token(token)
    
  • access-token createを作成するaccess_token(identify)このパラメータはuuidです.userにログインするuuidを渡すことをお勧めします.ユーザーが最初にログインしたときにaccess-token
  • を使用することに注意してください.
  • refresh-token createを作成するrefresh_token(identify)このパラメータはuuidで、サービス側はTokenの期限切れをリフレッシュする必要がないため、Tokenが期限切れになるとフロントエンドにフィードバックし、フロントエンドはRefresh Tokenを使用して新しいTokenを申請して引き続き使用することをお勧めします.サービス側はクライアントがTokenの更新を要求したときにRefresh Tokenの有効性を一度チェックするだけで、更新有効期間の操作を大幅に削減し、頻繁な読み書きを避けることができます.もちろんRefresh Tokenにも有効期間がありますが、この有効期間は少し長くなります.例えば、日単位の時間は
  • です.
  • tokenで情報を取得payloadに基づいて生成されたtokenですget_jwt_identity()メソッドは、
  • の暗号化および復号化に相当する伝達されたpayload情報を再び取得する.
  • 検証同理flaskでもcheck_をサポートpassword_hash(userobj[‘password’],password)は、その内部は主にフロントから渡されたユーザ名とパスワードhashに基づいてデータベースに格納されたユーザ名とパスワードを比較する暗号化
    fields = {
     'password': fields.PassWordField(nullable=False)
     }
     #                  password      ,      password           
    
    現在のユーザが登録しているpasswordとデータベースに格納されている一致するかどうかを比較する
    	from werkzeug.security import check_password_hash
    	#                               ,                ,                    
    	if not check_password_hash(userobj['password'], password):
    		Raise ValueError(_('    '))
    
  • である.