一直對token的做用不大明白. ###一.微信公衆號算法
開發微信公衆號的時候,咱們須要在微信公衆平臺的配置界面 寫一個token和咱們服務器端的url接口.服務器
普通用戶和公衆號交互的具體流程是:用戶發送一條文本或其餘信息,該信息發送到微信的服務器,微信的服務器向以前咱們填寫的服務器的url接口,推送該用戶發送的信息,爲了保證良好的體驗,微信但願咱們能在5秒內做出響應。微信
微信每次推送信息給咱們的服務器時,都會直接在url後攜帶幾個參數,signature,timestamp,nonce 具體的驗證: 把token(咱們指定的,固然是已知), timestamp,nonce 三個值以字典序排序後,進行sha1加密。 和signature 比較,若是相同,則可認定是微信在訪問咱們的接口,而不是其餘惡意來源。網絡
當咱們訪問微信的接口時,微信要求咱們必須攜帶一個access_token. 這個access_token是哪裏來的呢?咱們能夠看到開發者設置界面有一個app_id, app_sercet。咱們能夠根據這個兩個參數,訪問一個獲取access_token的接口便可返回. 之後,咱們訪問微信提供的接口都攜帶access_token便可,注意,access_token是有時間限制的,默認過時時間爲7200秒,天天獲取access_token的次數也是有上限的.只要按照規定來,徹底是夠用的..app
經過access_token,微信服務器也能夠肯定是哪一個微信公衆號的合法請求,而不是惡意用戶微信公衆平臺
###二.公司的項目裏用到的token加密
咱們的Android端(其餘同理)訪問接口時,必將攜帶下面的參數url
reqtime, user, token, source Android端這裏的source和user 都是'Android'.排序
驗證: 先看source渠道,根據user,source,key,reqtime一塊兒md5. 看是否是和token相等。這裏面只有key不是經過網絡傳輸過來的. 這裏能夠還能夠根據reqtime, 給定一個時間約束,一旦超過指定時間,則視爲無效token
項目中的驗證方法和微信仍是相似的.只是名字不同罷了. 都是本地持有一個私有的字符串(微信公衆號裏叫token,咱們叫key)這裏統一叫S, 這個S是不變的,任什麼時候候都不須要經過網絡傳輸的 根據這個S, 和其餘一些參數,好比A,B . 經過加密生成一個新的字符串C.咱們只須要傳輸A,B,C便可
對方拿到A,B,C三個參數後,再按照以前的算法,A,B,S加密看是否是等於C. 只要等於C,說明就是合法的來源