一、JWT 的Tokenjavascript
標準的Token由三個部分並以.(點號)鏈接方式組成,即 header.payload.signature,以下css
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJuaW5naGFvLm5ldCIsImV4cCI6IjE0Mzg5NTU0NDUiLCJuYW1lIjoid2FuZ2hhbyIsImFkbWluIjp0cnVlfQ.SwyHTEx_RQppr97g4J5lKXtabJecpejuef8AqKYMAJc
html
其中header,payload採用Base64編碼,java
而signature則用 Base64 編碼後的 header.payload,再用一個 Secret 對這個串進行算法加密一下,Secret僅安全存儲在服務端git
{ "typ": "JWT", "alg": "HS256" }
typ聲明類型,這裏是jwtgithub
alg聲明加密的算法 一般直接使用 HMAC SHA256ajax
payload的標準字段算法
iss:Issuer,發行者(jwt簽發者) sub:Subject,主題 aud:Audience,觀衆(接收jwt的一方) exp:Expiration time,過時時間(jwt的過時時間,這個過時時間必需要大於簽發時間) nbf:Not before(定義在什麼時間以前,該jwt都是不可用的) iat:Issued at,發行時間(jwt的簽發時間) jti:JWT ID(jwt的惟一身份標識,主要用來做爲一次性token,從而回避重放攻擊)
header (base64後的) api
payload (base64後的) 安全
secret
// javascript var encodedString = base64UrlEncode(header) + '.' + base64UrlEncode(payload); var signature = HMACSHA256(encodedString, 'secret');
二、Token的使用
通常是在請求頭裏加入Authorization
,並加上Bearer
標註:
三、基於Token + 參數簽名的WebApi認證
參數簽名:用戶拿着相應的token以及請求的參數和服務器端提供的簽名算法計算出簽名後再去訪問指定的api
在請求頭中可添加timespan(時間戳),nonce(隨機數),staffId(用戶Id),signature(簽名參數)
ajax客戶端調用樣例
$(function () { $.ajax({ type: "get", url: url, data: {uid: 1}, beforeSend: function (xhr) { xhr.setRequestHeader('Authorization', 'Bearer ' + token); }, success: function (data, status) { }, error: function (e) { }, complete: function () { } }); });
參考
https://github.com/jwt-dotnet/jwt
http://www.cnblogs.com/binyue/p/4812798.html
http://www.javashuo.com/article/p-wbuaofqc-n.html
http://www.javashuo.com/article/p-xhtbgoak-gt.html
http://blog.zhishile.com/Article/Show/5df2a392-8a8c-4e12-8a05-774f47a4570a
http://blog.zhishile.com/Article/Show/90e3cb1f-bbe5-4dbc-97f2-7ce7c8e83593
http://blog.zhishile.com/Article/Show/149167a2-8ca8-4d69-bdfc-83710807f252
http://www.cnblogs.com/MR-YY/p/5972380.html
http://www.cnblogs.com/lyzg/p/6028341.html
https://www.cnblogs.com/chenwolong/p/Token.html