web-dev-qa-db-ja.com

JSON Web Token(JWT):承認と認証

JWTの用語は、いくつかの理由で私を悩ませてきました。 JWTは承認に適していますか、それとも認証のみですか?

私が間違っている場合は修正してください。ただし、承認は常に、誰かがリソースへのアクセスを許可する行為であると読みましたが、JWTには、特定のリソースへのユーザーのアクセスを実際に許可する実装がないようです。 JWTの実装に関するすべての話題は、ユーザーにトークンを提供することです。このトークンは、呼び出しのたびにバックエンドサービスエンドポイントに渡され、そこで有効性がチェックされ、有効なアクセスが許可されているかどうかが確認されます。したがって、任意のユーザーのAuthenticationにJWTを使用できますが、特定の有効なユーザーへのアクセスをどのように制限できますか?

JWTを使用して、ユーザーの役割に応じて少数のユーザーを制限するにはどうすればよいですか? JWTはタイプ承認の詳細も提供しますか、それとも単に認証を提供しますか?

あなたの助けと私の疑いを辛抱強く読んでくれてありがとう。

12
Rohan Kadu

Authorizationwith[〜#〜] jwt [〜#〜]は、特定のトークンを使用して実現できます クレーム

Json Web Tokenのクレームとしてパッケージ化された他の多くのユーザー情報と同じように、特定の権限をトークンに事前に入力して、後で承認サービスによって傍受することができます。

通常、承認は、APIエンドポイントへのアクセスを制限するために使用されるアクセス許可に基づいたアクセス許可です(フロントエンドアプリのビューへのアクセスをユーザーに許可するために使用される場合もあります)。

以下に、許可要素を持つサンプル[〜#〜] jwt [〜#〜]トークンを示します。

{
  "UserInfo": {
    "id": "#{USER_ID}",
    "roles": {
      "#{ROLE_NAME}": "#{ROLE_ID}"
    },
    "permissions": {
      "#{PERMISSION_NAME}": "#{PERMISSION_ID}",
    }
  },
  "exp": 1488888888
}
7
tmarwen

JWTは次の2つの目的で使用できます。

  1. 認証(あなたが言ったように)
  2. 情報交換。

第二部は興味深いものです。 JWTには以下が含まれます。

  • ヘッダー:アルゴリズムとトークンタイプを含む
  • ペイロード:エンティティ(通常はユーザー)と追加のメタデータに関するステートメントです。クレームには、登録済み、パブリック、およびプライベートクレームの3つのタイプがあります。
  • 署名:署名は、JWTの送信者が本人であることを確認し、メッセージが途中で変更されていないことを確認するために使用されます。

ペイロードには、権限のリストなど、ユーザーに関する情報を含めることができます。このようにして、認証に使用できます。

Jwt.ioの例:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ

を含む:

{
  "alg": "HS256",
  "typ": "JWT"
}
{
  "sub": "1234567890",
  "name": "John Doe",
  "admin": true
}

ペイロードには、IDと管理権限に関する情報が含まれていることがわかります。ペイロードの署名があるため、これらのデータを信頼できます。

4
JEY