webapi鑑權使用token令牌

2021-08-21 07:20:08 字數 2241 閱讀 3505

一為什麼使用token驗證:

證,那麼這就需要使用者提供一些資訊,比如使用者名稱密碼等,但是為了安全起見讓使用者暴露的明文密碼次數越少越好,我們一般在web專案中,大多數採用保

它的使用者資料儲存在本地,可以實現免登陸等,只在它拿資料的時候 提交認證資訊就行了 。

二什麼場景使用token驗證:

現在很多基於restful的api介面都有個登入的設計,也就是在發起正式的請求之前先通過乙個登入的請求介面,申請乙個叫做token的東西。申請成功後,後面其他的請求都要帶上這個token,服務端通過這個token驗證請求的合法性。這個token通常都有乙個有效期,一般就是幾個小時。

三token驗證有什麼特點

1.無狀態、可擴充套件

2.支援移動裝置

3.跨程式呼叫

4.安全

四token驗證的原理

基於token的身份驗證是無狀態的,我們不將使用者資訊存在伺服器或session中。使用者登入後向伺服器提供使用者認證資訊(如賬戶和密碼),伺服器認證完後給客戶端返回乙個token令牌,使用者再次獲取資訊時,帶上此令牌,如果令牌正取,則返回資料。對於獲取token資訊後,訪問使用者相關介面,客戶端請求的url需要帶上如下引數:

時間戳:timestamp

token令牌:token

然後將所有使用者請求的引數按照字母排序(包括timestamp,token),然後更具md5加密(可以加點鹽),全部大寫,生成sign簽名,這就是所說的url簽名演算法。然後登陸後每次呼叫使用者資訊時,帶上sign,timestamp,token引數。

五token如何生成

token例項

/**

* token 的 model 類,可以增加字段提高安全性,例如時間戳、url 簽名

* @author scienjus

* @date 2015/7/31.

*/public class tokenmodel

public long getuserid ()

public void setuserid (long userid)

public string gettoken ()

public void settoken (string token)

}

/**

* 對 token 進行操作的介面

* @author scienjus

* @date 2015/7/31.

*/public inte***ce tokenmanager

/** * 通過 redis 儲存和驗證 token 的實現類

* @author scienjus

* @date 2015/7/31.

*/@component

public class redistokenmanager implements tokenmanager

public tokenmodel createtoken (long userid)

public tokenmodel gettoken (string authentication)

string param = authentication.split ("_");

if (param.length != 2)

// 使用 userid 和源 token 簡單拼接成的 token,可以增加加密措施

long userid = long.parselong (param [0]);

string token = param [1];

return new tokenmodel (userid, token);

}public boolean checktoken (tokenmodel model)

string token = redis.boundvalueops (model.getuserid ()).get ();

if (token == null || !token.equals (model.gettoken ()))

// 如果驗證成功,說明此使用者進行了一次有效操作,延長 token 的過期時間

redis.boundvalueops (model.getuserid ()).expire (constants.token_expires_hour, timeunit.hours);

return true;

}public void deletetoken (long userid)

}

Token鑑權機制

1 使用者註冊 新增使用者,兩個引數 userid password 2 使用者登入,登入校驗userid和password 是否正確,正確根據userid password 時間戳,用md5不可逆演算法生成token。將userid token 超時時間存到資料庫中,可以存在redis中,並將to...

PHP實現JWT鑑權Token

php實現jwt class jwt public static function gettoken array payload else public static function verifytoken token 簽名驗證 if urlencode header payload self k...

JWT實現基於token的鑑權

2018年01月25日 17 59 15 2.一般放在http的headers 引數裡面的authorization裡面,值的前面加bearer關鍵字和空格。3.主要用於身份認證和資訊交換 4.由三部分組成,用英文句點連線 例如 yyyyyy.zzzzzz payload.signature 由小數...