この記事では、JWT の原則と簡単なアプリケーション (コード付き) を紹介します。これには一定の参考価値があります。必要な友人は参照できます。お役に立てば幸いです。
JWT認証ログイン
最近監査システムを作っているのですが、バックグラウンドログインにJWTログイン認証が使われていますここでは主に概要を書いていきます
JWTとは
Json Web トークン (JWT) は、公式 Web サイトの定義によれば、ネットワーク アプリケーション環境間でクレームを転送するために実装された JSON ベースのオープン標準です。このトークンは、コンパクトで安全になるように設計されており、分散サイトに特に適していますシングル サインオンのシナリオ。 JWT クレームは通常、リソース サーバーからリソースを取得するために、アイデンティティ プロバイダーとサービス プロバイダーの間で認証されたユーザー ID 情報を転送するために使用されます。他のビジネス ロジックに必要な追加のクレーム情報も追加できます。トークンは直接使用することもできます。認証または暗号化のために。
JWT を使用する理由
これは主に従来のセッションと比較されます。従来のセッションでは、サーバー側 (通常はメモリ) にログイン情報を保存する必要があり、バックエンド サーバーは分散環境では他のホストに情報が保存されないため、固定ホストで認証する必要がある ユーザー数が多い場合、認証ポイントでボトルネックが発生しやすく、アプリケーションの拡張が難しい。
JWT の原則
JWT はドットで区切られた 3 つの部分で構成されています。このようになります。JWT トークン自体にはスペースや改行などはありません。外観
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9. eyJpc3MiOiJsYWJzX3B1cmlmaWVyLWFwaS1wYW5lbCIsImlhdCI6MTU1Mjk3NTg3OCwiZXhwIjoxNTU1NTY3ODc4LCJhdWQiOiJodHRwOi8vZmYtbGFic19wdXJpZmllci1hcGktdGVzdC5mZW5kYS5pby9wcm9kL3YxL2F1dGgvand0Iiwic3ViIjoiMTUwMTM4NTYxMTg4NDcwNCIsInNjb3BlcyI6WyJyZWdpc3RlciIsIm9wZW4iLCJsb2dpbiIsInBhbmVsIl19. m0HD1SUd30TWKuDQImwjIl9a-oWJreG7tKVzuGVh7e4
ヘッダー部分はJWTのメタデータを記述するjsonで、通常は次のようになります
{ "alg": "HS256", "typ": "JWT" }
algは署名に使用されるアルゴリズムを示し、デフォルトはHMAC SHA256 は HS256 と書き、tye はこのトークンの種類を表し、JWT トークンは一律に JWT を使用し、上記のヘッダーによって生成されたトークンは
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9
{ "iss": "labs_purifier-api-panel", "iat": 1552975878, "exp": 1555567878, "aud": "http://ff-labs_purifier-api-test.fenda.io/prod/v1/auth/jwt", "sub": "1501385611884704", "scopes": [ "register", "open", "login", "panel" ] }
eyJpc3MiOiJsYWJzX3B1cmlmaWVyLWFwaS1wYW5lbCIsImlhdCI6MTU1Mjk3NTg3OCwiZXhwIjoxNTU1NTY3ODc4LCJhdWQiOiJodHRwOi8vZmYtbGFic19wdXJpZmllci1hcGktdGVzdC5mZW5kYS5pby9wcm9kL3YxL2F1dGgvand0Iiwic3ViIjoiMTUwMTM4NTYxMTg4NDcwNCIsInNjb3BlcyI6WyJyZWdpc3RlciIsIm9wZW4iLCJsb2dpbiIsInBhbmVsIl19# です##3.Signature(Signature)Signature は、前の 2 つの部分で生成された 2 つのトークンの暗号化です。使用される暗号化方式はヘッダーで指定されます。ここでは HS256 です。このとき、シークレットはkey が必要です。漏洩することはできません。一般的なプロセスは次のとおりです:
HMACSHA256( base64UrlEncode(header) + "." + base64UrlEncode(payload), secret)
Authorization: Bearer <token>
def create_token(): payload={ "iss": "labs_purifier-api-panel", "iat": 1552975878, "exp": 1555567878, "aud": Config.AUDIENCE, "sub": "1501385611884704", "scopes": [ "register", "open", "login", "panel" ] } token = jwt.encode(payload, Config.SECRET_KEY, algorithm='HS256') return True, {'access_token': token}Verify token
def verify_jwt_token(token): try: payload = jwt.decode(token, Config.SECRET_KEY, audience=Config.AUDIENCE, algorithms=['HS256']) except (ExpiredSignatureError, DecodeError): return False, token if payload: return True, jwt_model生成時に aud パラメータが追加された場合、検証中にaudienceパラメータも使用する必要があり、値が同じである必要があることに注意してください
この記事はここで終了しました。その他のエキサイティングなコンテンツについては、PHP 中国語 Web サイトの
Python ビデオ チュートリアル
列に注目してください。以上がJWT の原則と簡単なアプリケーションの紹介 (コード付き)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。