怪我咯2017-04-17 14:54:44
1. まず、koa-jwt
の機能を理解する必要があります。現時点では、decode
、sign
のみです。 >verify code> の機能は提供されていますが、token
の有効期限判定モジュールには検証のための専用の機能が提供されていないとのことでした。
2. トークン
の有効期限が切れているかどうかを確認するにはどうすればよいですか? まず jwt
について簡単に説明し、次に有効期限を決定する方法を説明します。
2.1 jwt
はじめに
JSON Web Token(jwt
) Web ページでは、多くの操作でユーザー権限の確認、ユーザーがログインしているかどうかの確認などが必要になります。通常、実装方法は 2 つあります。1 つは session
と cookie
を使用する方法で、もう 1 つは認証 token
を使用する方法です。認証に token
を使用すると、次の 2 つの主な利点があります。
ユーザー情報はすでにトークンに格納されているため、サーバーは DB にユーザー情報の取得をリクエストする必要はありません。
トークン認証方法はモバイル端末と PC 端末に同様に適用でき、サーバーは 2 セットの認証メカニズムを維持する必要はありません。
標準の jwt は、<header>
、<payload>
、<signature>
の 3 つの部分で構成されます
ヘッダー: Base64 でエンコードされた json オブジェクト (使用される暗号化アルゴリズムなどを含む)。
ペイロード: ユーザー関連の情報を格納する、base64 でエンコードされた json オブジェクト。
署名: ヘッダー、ペイロード A、およびキー (サーバーのみが知っている) に基づいて、ヘッダーで指定された暗号化アルゴリズムを使用して生成された署名文字列。
2.2 失敗の判断方法
トークンの有効期限がいつ切れるかを確認する方法はたくさんありますが、ここではいくつかの方法をリストします。
jwt は有効期限パラメータ設定を提供します。トークンを発行するとき (koa-jwt が署名を呼び出すとき)、jwt exp
属性を設定します。 >登録済みクレーム (予約済みクレーム) は、現在時刻よりも大きい値にする必要があることに注意してください。たとえば、現在時刻から 10 分後に期限切れになるように設定します。
{
exp: Date.now()+10*60*1000、
}
その後、ローカルストレージ、sessionStorage、または Cookie にトークンを persist
で保存できます。このトークンはリクエストを通じてサーバーに渡され、(koa-jwt の verify レポートを呼び出すときに) 検証されます。 TokenExpiredError
トークンの有効期限が切れている場合、エラーがスローされます。
エラーオブジェクト:
- 名前: 'TokenExpiredError'
- メッセージ: 「JWT の有効期限が切れました」
- 期限切れ: [期限切れ]
サーバーがトークンを生成した後、リクエストの戻り値の Cookie (または sessionStorage) にトークンを保存し、次のように Cookie の有効期限 expire
を設定できます。このリクエストでは、リクエストの header
または body
でトークンを取得できないときに、トークンの有効期限が切れていることがわかります (指定したコードと似ていますが、覚えておいてください)ストレージ トークンにこの Cookie の有効期限を設定します)。
exp
のような属性をカスタマイズします。exp
は予約された属性なので、最後に origin-iat
を設定できます。発行時刻は永続化されて保存されます。トークンを復号化した後、現在の時刻と origin-iat
の時刻の差が有効期限に達しているかどうかを確認し、有効期限に達している場合は、再度認証を要求して、トークンを再発行します。トークン、擬似コードは次のとおりです。
var profile = jwt.verify(req.header.token || req.body.token, Secret);
// 7 日以上経過している場合は、強制ログインします
if (Date().now() - profile.original_iat > 7 * 24 * 60 * 60 * 1000) { // iat == 発行時刻
return res.status(401).json({ isError: true, error: { message: 'アクセス禁止'}}); // 再ログ
}
いくつかのメソッドの違いは次のとおりです。1 番目と 3 番目のメソッドは常にリクエストを通じてトークンを取得できますが、トークンの有効期限が切れる可能性があります。 2 番目の方法は、リクエストを通じてトークンを取得できない可能性があることです。 ビジネス ニーズに基づいて適切な選択を行うのはあなた次第です。
添付ファイル: JSON Web トークン仕様 RFC 7519