JSON Web Token(JWT)認証はどのように機能しますか?

Header

JWT headerは、署名とエンコーディングに使用されるトークンタイプとアルゴリズムで構成されます。 アルゴリズムには、HMAC、SHA256、RSA、HS256、またはRS256を使用できます。

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

ペイロード

ペイロードは、クレームと呼ばれるセッションデータで構成されます。 私達が使用してもいい標準的な要求のいくつかは次あります,

  1. 発行者(iss)
  2. 件名(sub)
  3. オーディエンス(aud)
  4. 有効期限(exp)
  5. 発行時(iat)
{
"sub": "user10001",
"iat": 1569302116
}

カスタム要求は、要求セットに含めることもできます。 カスタム要求セットを使用する場合,

  • 大きなデータを要求セットに入れないでください。 クレームセットはコンパクトであることを意味します。
  • jwtは簡単にデコードできるので、機密情報を入れないでください。
{
"sub": "user10001",
"iat": 1569302116,
"role": "admin",
"user_id": "user10001"
}

署名

署名はJSON Web Token(JWT)の最も重要な部分です。 署名は、Base64Urlエンコードを使用してヘッダーとペイロードをエンコードし、ピリオド区切り文字で連結することによって計算されます。 これは暗号化アルゴリズムに与えられます。

// signature algorithm
data = base64urlEncode( header ) + "." + base64urlEncode( payload )signature = HMAC-SHA256( data, secret_salt )

だから、ヘッダやペイロードが変更されたとき、署名は再び計算されなければならない。 トークンの改ざんを防止する署名を計算するための秘密鍵は、Idプロバイダ(IdP)のみが持っています。

どのように動作しますか?

基本的に、idプロバイダー(IdP)はユーザー idを証明するJWTを生成し、リソースサーバーは秘密のsalt/公開鍵を使用してトークンの真正性をデコードして検証します。

  1. ユーザーは、ユーザー名とパスワードまたはgoogle/facebookを使用してサインインします。
  2. 認証サーバーは資格情報を検証し、秘密のソルトまたは秘密鍵のいずれかを使用して署名されたjwtを発行します。
  3. ユーザーのクライアントは、HTTP AuthorizationヘッダーでJWTを渡して、JWTを使用して保護されたリソースにアクセスします。
  4. リソースサーバーは、秘密のsalt/公開鍵を使用してトークンの信頼性を検証します。

コメントを残す

メールアドレスが公開されることはありません。

More: