ホームページ  >  記事  >  バックエンド開発  >  JWT の原則と簡単なアプリケーションの紹介 (コード付き)

JWT の原則と簡単なアプリケーションの紹介 (コード付き)

不言
不言転載
2019-03-29 10:53:392931ブラウズ

この記事では、JWT の原則と簡単なアプリケーション (コード付き) を紹介します。これには一定の参考価値があります。必要な友人は参照できます。お役に立てば幸いです。

JWT認証ログイン

最近監査システムを作っているのですが、バックグラウンドログインにJWTログイン認証が使われていますここでは主に概要を書いていきます

JWTとは

Json Web トークン (JWT) は、公式 Web サイトの定義によれば、ネットワーク アプリケーション環境間でクレームを転送するために実装された JSON ベースのオープン標準です。このトークンは、コンパクトで安全になるように設計されており、分散サイトに特に適していますシングル サインオンのシナリオ。 JWT クレームは通常、リソース サーバーからリソースを取得するために、アイデンティティ プロバイダーとサービス プロバイダーの間で認証されたユーザー ID 情報を転送するために使用されます。他のビジネス ロジックに必要な追加のクレーム情報も追加できます。トークンは直接使用することもできます。認証または暗号化のために。

JWT を使用する理由

これは主に従来のセッションと比較されます。従来のセッションでは、サーバー側 (通常はメモリ) にログイン情報を保存する必要があり、バックエンド サーバーは分散環境では他のホストに情報が保存されないため、固定ホストで認証する必要がある ユーザー数が多い場合、認証ポイントでボトルネックが発生しやすく、アプリケーションの拡張が難しい。

JWT の原則

JWT はドットで区切られた 3 つの部分で構成されています。このようになります。JWT トークン自体にはスペースや改行などはありません。外観

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.
eyJpc3MiOiJsYWJzX3B1cmlmaWVyLWFwaS1wYW5lbCIsImlhdCI6MTU1Mjk3NTg3OCwiZXhwIjoxNTU1NTY3ODc4LCJhdWQiOiJodHRwOi8vZmYtbGFic19wdXJpZmllci1hcGktdGVzdC5mZW5kYS5pby9wcm9kL3YxL2F1dGgvand0Iiwic3ViIjoiMTUwMTM4NTYxMTg4NDcwNCIsInNjb3BlcyI6WyJyZWdpc3RlciIsIm9wZW4iLCJsb2dpbiIsInBhbmVsIl19.
m0HD1SUd30TWKuDQImwjIl9a-oWJreG7tKVzuGVh7e4
1.ヘッダー

ヘッダー部分はJWTのメタデータを記述するjsonで、通常は次のようになります

{
  "alg": "HS256",
  "typ": "JWT"
}

algは署名に使用されるアルゴリズムを示し、デフォルトはHMAC SHA256 は HS256 と書き、tye はこのトークンの種類を表し、JWT トークンは一律に JWT を使用し、上記のヘッダーによって生成されたトークンは

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9
2 です。

iss: 発行者は、ID を入力してこのトークンなどを生成できます。 オプションのパラメーター
  • sub: JWT の対象となる顧客は、 user account_id など、オプションの
  • aud: JWTtoken の受信者は、このトークンを生成するインターフェース URL を入力できますが、必須ではありません。オプションの
  • exp: 有効期限、タイムスタンプ、整数、オプションのパラメータ
  • iat: トークンが生成された時刻、UNIX 時間、タイムスタンプ、オプションのパラメータ
  • nbf (Not Before): この時刻より前にトークンが利用できないことを示します、検証は通過しないことを意味します、オプション
  • jti: JWT ID、主にワンタイムトークンの生成に使用され、オプションのパラメータ
  • 公式に加えて、いくつかを定義することもできますカスタム フィールドを定義しますが、BASE64 は可逆であることを考慮して、機密情報を入力しないでください。
次は例です。

{
  "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"
  ]
}

上記のペイロード、BASE64 暗号化後、生成されるトークンは
eyJpc3MiOiJsYWJzX3B1cmlmaWVyLWFwaS1wYW5lbCIsImlhdCI6MTU1Mjk3NTg3OCwiZXhwIjoxNTU1NTY3ODc4LCJhdWQiOiJodHRwOi8vZmYtbGFic19wdXJpZmllci1hcGktdGVzdC5mZW5kYS5pby9wcm9kL3YxL2F1dGgvand0Iiwic3ViIjoiMTUwMTM4NTYxMTg4NDcwNCIsInNjb3BlcyI6WyJyZWdpc3RlciIsIm9wZW4iLCJsb2dpbiIsInBhbmVsIl19
# です##3.Signature(Signature)

Signature は、前の 2 つの部分で生成された 2 つのトークンの暗号化です。使用される暗号化方式はヘッダーで指定されます。ここでは HS256 です。このとき、シークレットはkey が必要です。漏洩することはできません。一般的なプロセスは次のとおりです:
HMACSHA256(
  base64UrlEncode(header) + "." +
  base64UrlEncode(payload),
  secret)
JWT の使用

JWT トークンは通常、リクエスト ヘッダーに配置されます。もちろん、 Cookie ですが、ドメイン全体の Cookie に配置することはできません。例:

Authorization: Bearer <token>

Python での JWT の簡単な生成と検証

jwt ライブラリ

トークンの生成

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 サイトの他の関連記事を参照してください。

声明:
この記事はsegmentfault.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。