2017-01-07 4 views
0

私はJWTシステムと単純なトークンベースのシステムeliminates token lookups in a databaseを持っていることを読んだ。しかし、私はそれがどのように可能かは分かりません。署名にHMACを使用する場合、サーバーは署名を検証するために各クライアントの秘密鍵を検索する必要はありませんか?または、すべてのクライアントが同じ秘密鍵を使用していますか? (非常に安全でないように聞こえる)。非対称アルゴリズムを使用している場合でも、署名を検証するために鍵の1つを検索する必要はありませんか?JWTはどのような要求に対してもデータベースルックアップの必要性をどのように排除しますか?

答えて

0

すべてのクライアントに同じ秘密鍵を使用できます。安全です!クライアントはあなたの鍵を決して見ません。 JWTが行うことができるのは、ペイロードが秘密鍵を使って署名されていることを確認することです。秘密を保持している限り、あなただけがペイロードに署名できたことがわかります。

+0

クライアントがキーを見たことがない場合、どのようにして自分のJWTメッセージに署名しますか?署名に鍵が必要ないのですか?感謝 – CyberFlower

+0

@Cyber​​Flower全体のポイントは、サーバーが何かを送信したことを確認することです。たとえば、トークンをクッキーに保存することができます。 –

1

通常、サーバーではユーザーを認証するための資格情報(ユーザー&のパスワード)が必要です。認証に成功すると、サーバは、クライアントではなくサーバの秘密鍵で署名されたJWTを発行します。

署名はコンテンツを保護し、署名者を識別します。ペイロードまたは署名への変更は、署名を検証するサーバによって検出され、JWTを拒絶する。したがって、サーバは、ペイロード内の例示的なユーザID subexpの認証に必要な特許請求の範囲、及びusernameemailまたは認可rolesような関心のある他の特許請求の範囲を含むことができるJWT

サーバに含まれるデータに依存することができます。 What to store in a JWT?を参照してください。

{ 
    "sub": "joe", 
    "iat": 1300819370, 
    "exp": 1300819380, 
    "email": "[email protected]", 
    "roles":["admin","finaluser"] 
} 

署名の検証後に、サーバは直接含まれ、特許請求の範囲の代わりにクエリデータベースを使用することができます。

対称鍵(HMAC)では、署名と検証が同じ鍵で行われます。非対称鍵ペア(RSA)は、秘密鍵と公開鍵で構成されます。署名は、秘密鍵と公開との検証によって行われます。クライアントがJWTを検証する必要がある場合は、非対称キーを使用します。

関連する問題