推測を止めてください:JJTは何ですか?


推測を止めてください:JJTは何ですか?



JSONウェブトークン


JWTは、情報がJSONオブジェクトとして双方の間で安全に送信されるREST APIで認証を実行するためのコンパクトで自己完結型の方法を定義するオープンスタンダードです.
それはデジタル署名されているので、この情報を確認し、信頼できる.JWTSはRSAを使用して秘密(HMACアルゴリズム)または公開/秘密キーペアを使用して署名できます.
注1:我々はそれがサイズのためにコンパクトであると考えます、それはURL、ポストパラメタまたはHTTPヘッダーの中にそれを送ることが可能です.また、そのサイズのために、その伝達は速いです.
注2 :データベースを一度に照会する必要がないので、自己充足を考慮すると、ペイロードにはユーザに関するすべての必要な情報が含まれている.

ときに使用します。


認証:ユーザーが署名された後、各後続の要求はJWTを含んでいます.これにより、ユーザーはルート、サービス、およびそのトークンを必要とするリソースにアクセスできます.
情報交換:JWTSは当事者間の情報を送信する安全な方法です.なぜなら、送信側が署名していることを確認することができるからです.また、ヘッダーとペイロードを使用して署名が作成されているので、内容が変更されていないことを確認できます.

JWT構造


JWTはドット(.)で区切られた3つの部分からなる.ヘッダー、ペイロード、および署名.これらの部分はこの構造に従っている.yyyyy.zzzzz.

ヘッダー


通常、トークン型(JWT)とハッシュアルゴリズム(HMAC、SHA 256、RSAなど)を含む情報が含まれます.
その後、そのヘッダーを含んでいるJSONはJWTの最初の部分を形成するためにbase 64 url符号化されます.
//Example of a Header
{
  "alg": "HS256",
  "typ": "JWT"
}

ペイロード


エンティティ(通常、ユーザー)と追加のメタデータに関するステートメントであるクレームが含まれます.
注意:パスワードのようなユーザーについての賢明な情報を含めることはできませんが、ユーザID、名前、メールを含めることはOKです.
主張の例:ISS(発行者)、EXP(満了時間)、サブ(主題)、AUD(観衆)、その他.
その後、ペイロードを含んでいるJSONはそれからJWTの第2の部分を形成するためにbase 64 url符号化されます.
//Example of a Payload
{
  "sub": "0987654321",
  "name": "Jane Doe",
  "admin": true 
}

署名


JWTの送付者が彼らがそうであると主張して、メッセージが送信されている間、メッセージが変わらなかったのを保証するのを確認するのに使用されます.
署名を作成するには、エンコードされたヘッダー、コード化されたペイロード、秘密、ヘッダーで指定されたアルゴリズムを取り、それに署名します.
//Example of a Signature using the HMAC SHA256 algorithm
HMACSHA256(
  base64UrlEncode(header) + "." +
  base64UrlEncode(payload),
  secret)
注意:秘密を生成する簡単な方法は、文字列のMD 5ハッシュを生成するためにhttp://www.md5.cz/を使用しています.

3つの部品を結合すること


出力はドットによって分離された3つのbase 64文字列です:エンコードされたヘッダー、符号化されたペイロードとそれは秘密で署名されます.HTMLとHTTP環境で渡すことができます.

注意: JWTへ移動します.IOは、デコードし、確認し、JWTを生成することができますウェブサイト.

JWTはどのように働きますか?


1 -ユーザが自分の資格情報を使用して首尾よく署名して認証されると、JWTが返されます.


注意:トークンが資格情報であることを念頭に置いておく必要がありますので、セキュリティ上の問題を防ぐ必要があります.
2 -ユーザーが保護されたルートにアクセスしたいときはいつでも、その要求はJWTを送るでしょう、通常、Bearer Schemaを使用して認可ヘッダーで:認可:ベアラー.

注意:この認証機構は状態がないので、ユーザ状態はサーバメモリに保存されません.その代わりに、サーバの保護されたルートは認可ヘッダーの有効なJWTをチェックして、この状態が満たされるならば、ユーザーを許します.その結果、JWTSが自己完結しているので、データベースを複数回照会する必要はありません.

なぜあなたは使用しないでください。


  • トークンが自己完結しているので、認証に必要なすべての情報があります.サーバーがセッション状態を保存しなくても、スケーラビリティに適しています.

  • 彼らはどこからでも生成することができます:トークンの生成とトークンの検証が分離されます.これは、別のサーバー上でトークンの署名を処理することができます.

  • 彼らはアクセス制御を許可します:ペイロードの中で、ユーザ役割と許可を指定するのは可能です.また、ユーザーがアクセスできるリソースを定義することもできます.
  • ベストプラクティス


  • トークントークンが期限切れになります:トークンが署名されたとき、署名キーを変更するか、明示的に有効期限を設定しない限り、決して期限切れになりません.これは潜在的な問題を引き起こす可能性がありますので、トークンの有効期限および/または回収のための戦略を持っている必要があります.

  • ペイロードに機密データを格納しないでください:トークンは簡単にデコードすることができます、彼らの目標は彼らのサインで操作に対して保護することです.したがって、ペイロードに必要な数のクレームを追加するだけで、最高のパフォーマンスとセキュリティが得られます.

  • 良い魔術師、あなたの秘密を明らかにしないでください:それは本当に必要なサービスに署名キーを明らかにする.それは他のいかなる証明書のように扱われるべきです.

  • 利用HTTPS:非HTTPS接続では、リクエストを遮断することができますトークンがより簡単に妥協.
  • キープタッチ


    私の社会的メディアを通して私に連絡してください.一般にセキュリティ、認証、プログラミングについて話しましょう.
    私たちと共有するとどのようなJWTの良い実践を提唱する.