私はJWTとflask-jwtを初めて使用するので、ドキュメントで見つけた例を実行します。これを読んでJWTの理解を深めました。
しかし、複数のトークンをどのように処理すればよいのでしょうか? つまり、ユーザーは資格情報を「myserver/auth」に投稿し、トークンをクライアントに返します。クライアントが新しいリクエストを送信するとき、彼はトークンを送信する必要があります。
私の質問は、どの「トークン」がどのユーザーに属し、「トークン」がどこに保存されているかをどのように知るかです。
JWT は、ドット (.) で区切られた次の 3 つの部分で構成されます。
したがって、JWT は通常、次のようになります。
xxxxx.yyyyy.zzzzz
ヘッダ
ヘッダーは通常、JWT であるトークンのタイプと、HMAC SHA256 または RSA などのハッシュ アルゴリズムの 2 つの部分で構成されます。
{
"alg": "HS256",
"typ": "JWT"
}
トークンの 2 番目の部分は、クレームを含むペイロードです。クレームは、エンティティ (通常はユーザー) と追加のメタデータに関するステートメントです。これは興味深い部分です。なぜなら、トークン内であなたの所属を確認できるからです。{ "userid": "1234567890", "expiration_date": "2016-05-129" }
新しいトークンを生成するときに、ペイロードに含まれるデータを指定できるため、ユーザーを識別するための userid と、新しいトークンを要求する時期かどうかを確認するための expire_date を追加できます。
署名部分を作成するには、エンコードされたヘッダー、エンコードされたペイロード、シークレット、ヘッダーで指定されたアルゴリズムを取得し、署名する必要があります。署名は、JWT の送信者が本人であることを確認し、メッセージが途中で変更されていないことを確認するために使用されます。
サーバー側で秘密鍵を保持する必要があるため、有効なペイロードを復号化し、どのユーザーが属しているかを確認できます。このようにして、すべてのトークンがユーザーを検証するのに十分なデータを保存するため、ストア トークンを自由に回避できます。
更新されたトークンを生成するプロセスは同じであるため、クライアント側は更新サービス ( www.myhost.com/renewのような HTTP 要求) を要求し、古いトークンを送信して新しいトークンを生成する必要があります。どのユーザーがそのトークンに属しているかを確認できるため、更新トークンには同じペイロードが含まれている必要がありますが、有効期限は異なります。
シングルサインオンなどのより多くの戦略でJWTを使用して、同じ資格情報を持つ1人のユーザーのみが同時にログに記録されるようにすることができます.