JWT簡介json web token bear token


一個JWT實際上就是一個字符串,它由三部分組成, 頭部 載荷 Payload 簽名
 JWTs can be signed using a secret (with the  HMAC  algorithm) or a public/private key pair using  RSA .
/*
|--------------------------------------------------------------------------
| Required Claims
|--------------------------------------------------------------------------
|
| Specify the required claims that must exist in any token.
| A TokenInvalidException will be thrown if any of these claims are not
| present in the payload.
|
*/
'required_claims' => [
'iss',
'iat',
'exp',
' nbf',
'sub',
' jti',
],
示例:
{
"iss": "http://laravel_api.app/api/register",
"iat": 1502356728,
"exp": 1502360328,(相差3600s)
"nbf": 1502356728,
"jti": "R0Gd00AvOW259LGo",
"sub": 11,
"prv": "3787fba1618a930526aca6c8bb9b44b83f297726"
}
這里面的前6個字段都是由JWT的 標准所定義的
  • sub: 該JWT所面向的用戶
  • iss: 該JWT的簽發者
  • iat(issued at): 在什么時候簽發的token
  • exp(expires): token什么時候過期
  • nbf(not before):token在此時間之前不能被接收處理
  • jti:JWT ID為web token提供唯一標識
iss是issuer的簡寫,表明請求的實體,可以是發出請求的用戶的信息。
There are three types of claims:  reserved public , and  private claims.
像上面的是reserved:
iss  (issuer),  exp  (expiration time),  sub (subject),  aud  (audience), and others.
An example of payload could be: { "sub": "1234567890" , "name": "John Doe" , "admin": true }
{
"iss": "John Wu JWT",
"iat": 1441593502,
"exp": 1441594722,
"aud": "www.example.com",
"sub": "jrocket@example.com",
"from_user": "B",
"target_user": "A"
}
這里面的前五個字段都是由JWT的標准所定義的。
aud : 接收該JWT的一方
將上面的JSON對象進行[ base64編碼 ]可以得到下面的字符串。這個字符串我們將它稱作JWT的 Payload (載荷)。
1 eyJpc3MiOiJKb2huIFd1IEpXVCIsImlhdCI6MTQ0MTU5MzUwMiwiZXhwIjoxNDQxNTk0NzIyLCJhdWQiOiJ3d3cuZXhhbXBsZS5jb20iLCJzdWIiOiJqcm9ja2V0QGV4YW1
JWT還需要一個頭部,頭部用於描述關於該JWT的最基本的信息,例如其類型以及簽名所用的算法等。這也可以被表示成一個JSON對象。
1
2
3
4
{
"typ": "JWT",
"alg": "HS256"
對它也要進行 Base64編碼 ,之后的字符串就成了JWT的 Header (頭部)。
1 eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9
將上面的兩個編碼后的字符串用句號 . 連接在一起(頭部在前),就形成了
1 eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJmcm9tX3VzZXIiOiJCIiwidGFyZ2V0X3VzZXIiOiJBIn0
最后,我們將上面拼接完的字符串用HS256算法進行加密。在加密的時候,我們還需要提供一個密鑰(secret)
得到我們加密后的內容
1 rSWamyAYwuHCo7IFAgd1oRpSP7nzL7BF5t7ItqpKViM
最后將這一部分簽名 也拼接在被簽名的字符串后面(2個句號) ,我們就得到了完整的JWT
1 eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJmcm9tX3VzZXIiOiJCIiwidGFyZ2V0X3VzZXIiOiJBIn0.rSWamyAYwuHCo7IFAgd1oRpSP7nzL7BF5t7ItqpKViM
多點登錄”
Set -Cookie: jwt=lll.zzz.xxx; HttpOnly ; max-age=980000; domain=.taobao.com
必須使用 HttpOnly 屬性來防止Cookie被JavaScript讀取,從而避免 跨站腳本攻擊(XSS攻擊)
注意 domain 必須設置為一個點加頂級域名,即 .taobao.com 。這樣,taobao.com和*.taobao.com就都可以接受到這個Cookie,並獲取JWT了。
一般放在HTTP的headers 參數里面的authorization里面,值的前面加 Bearer關鍵字和空格 。除此之外,也可以在url和request body中傳遞。
Authorization: Bearer {yourtokenhere}
  • OAuth是一個授權的開放網絡標准,最終目的是取得token(令牌)
  • Token 令牌,視為用戶登錄成功,通行的唯一令牌
  • JWT是生成token的輕巧規范,可以結合一起使用
Unresolvable dependency resolving [Parameter #0 [ $app ]] in class Illuminate\Cache\CacheManager
Dependency Bind from
$app->bind(Illuminate\Cache\CacheManager::class, function ($app) { return new Illuminate\Cache\CacheManager($app); });
Unresolvable dependency resolving [Parameter #0 [ <required> $app ]] in class Illuminate\Auth\AuthManager
$app->bind(Illuminate\Auth\AuthManager::class, function ($app) { return new Illuminate\Auth\AuthManager($app); });


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM