JWTの用語は、いくつかの理由で私を悩ませてきました。 JWTは承認に適していますか、それとも認証のみですか?
私が間違っている場合は修正してください。ただし、承認は常に、誰かがリソースへのアクセスを許可する行為であると読みましたが、JWTには、特定のリソースへのユーザーのアクセスを実際に許可する実装がないようです。 JWTの実装に関するすべての話題は、ユーザーにトークンを提供することです。このトークンは、呼び出しのたびにバックエンドサービスエンドポイントに渡され、そこで有効性がチェックされ、有効なアクセスが許可されているかどうかが確認されます。したがって、任意のユーザーのAuthenticationにJWTを使用できますが、特定の有効なユーザーへのアクセスをどのように制限できますか?
JWTを使用して、ユーザーの役割に応じて少数のユーザーを制限するにはどうすればよいですか? JWTはタイプ承認の詳細も提供しますか、それとも単に認証を提供しますか?
あなたの助けと私の疑いを辛抱強く読んでくれてありがとう。
Authorizationwith[〜#〜] jwt [〜#〜]は、特定のトークンを使用して実現できます クレーム 。
Json Web Tokenのクレームとしてパッケージ化された他の多くのユーザー情報と同じように、特定の権限をトークンに事前に入力して、後で承認サービスによって傍受することができます。
通常、承認は、APIエンドポイントへのアクセスを制限するために使用されるアクセス許可に基づいたアクセス許可です(フロントエンドアプリのビューへのアクセスをユーザーに許可するために使用される場合もあります)。
以下に、許可要素を持つサンプル[〜#〜] jwt [〜#〜]トークンを示します。
{
"UserInfo": {
"id": "#{USER_ID}",
"roles": {
"#{ROLE_NAME}": "#{ROLE_ID}"
},
"permissions": {
"#{PERMISSION_NAME}": "#{PERMISSION_ID}",
}
},
"exp": 1488888888
}
JWTは次の2つの目的で使用できます。
第二部は興味深いものです。 JWTには以下が含まれます。
ペイロードには、権限のリストなど、ユーザーに関する情報を含めることができます。このようにして、認証に使用できます。
Jwt.ioの例:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ
を含む:
{
"alg": "HS256",
"typ": "JWT"
}
{
"sub": "1234567890",
"name": "John Doe",
"admin": true
}
ペイロードには、IDと管理権限に関する情報が含まれていることがわかります。ペイロードの署名があるため、これらのデータを信頼できます。