JWT术语一直困扰着我,原因很少.JWT是否适合授权或仅用于身份验证?
如果我错了,请纠正我,但我一直认为授权是允许某人访问资源的行为,但JWT似乎没有任何实际允许访问给定资源的用户的实现.所有JWT实现都在谈论为用户提供令牌.然后,每次调用时都会将此令牌传递给后端服务端点,在后端服务端点检查其是否有效以及是否授予了有效访问权限.因此,我们可以使用JWT对任何用户进行身份验证,但我们如何限制对特定有效用户的访问?
我们如何使用JWT根据他们的角色限制少数用户?JWT是否也提供任何类型的授权细节,或者它只是向我们提供认证?
提前感谢您的帮助并耐心地阅读我的疑问.
授权与JWT可以使用令牌具体实现的权利要求.
由于在Json Web令牌中打包为声明的许多其他用户信息,特定权限可以预先填充在令牌中,并且可以在稍后由授权服务拦截.
通常,授权是基于权限的,其中权限用于限制对api端点的访问(还可以用于授予用户对前端应用程序上的视图的访问权).
这里是一个具有权限元素的示例JWT令牌:
{
"UserInfo": {
"id": "#{USER_ID}",
"roles": {
"#{ROLE_NAME}": "#{ROLE_ID}"
},
"permissions": {
"#{PERMISSION_NAME}": "#{PERMISSION_ID}",
}
},
"exp": 1488888888
}
Run Code Online (Sandbox Code Playgroud)
JWT可以用于两个目的:
第二部分是有趣的部分。JWT包含:
有效负载可以包含有关用户的信息,例如权限列表。这样,您可以将其用于授权。
来自jwt.io的示例:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ
Run Code Online (Sandbox Code Playgroud)
其中包含:
{
"alg": "HS256",
"typ": "JWT"
}
{
"sub": "1234567890",
"name": "John Doe",
"admin": true
}
Run Code Online (Sandbox Code Playgroud)
您会看到有效负载包含有关管理权限的标识和信息。由于有效负载签名,您可以信任这些数据。