sponsored links

帶你搞懂,為什麼淘寶京東等使用不需要每次都登入?

背景

現如今,人人有手機,手機皆為蘋果安卓等智慧手機;

現如今,人人愛網購,網購皆為淘寶京東等電商平臺。

喜歡網購的你是否發現,下載好淘寶京東,只要你時不時的用一下它,就不用登入了。

這是為什麼呢?

從技術的角度而言,當用戶在一定的時間內使用過該平臺就可以不用再次登入,但一定要注意的是首次肯定得登入,如果使用者超過一定的時間沒有使用,就必須得重新登入,這種方式我們將它稱之為雙token。

流程示意圖

帶你搞懂,為什麼淘寶京東等使用不需要每次都登入?

具體說明如下:

  • 1.根據需要下載軟體,完成註冊賬戶
  • 2.登入賬戶,後端返回 兩個token資訊,分別為 access_token 以及 refresh_token,access_token稱之為短token,refresh_token稱之為長token
  • 3.短token也就是access_token未過期,所有的請求一切都正常,使用者需要什麼資料就返回什麼資料
  • 4.access_token 過期,服務端返回一個狀態碼給客戶端,客戶端接收到該狀態碼之後,使用refresh_token重新獲取一次新的 access_token 和 refresh_token,相當於重置token
  • 5.如果在refresh_token有效期中沒有使用過該軟體,意味著refresh_token過期,使用它獲取新的 access_token 和 refresh_token 時會返回新的一個狀態碼,提示使用者必須登入

有的人可能會有這樣的疑問:為什麼在使用 refresh_token 時要返回新的access_token 和 refresh_token,而不是延長 原來的 refresh_token 有效期?

    • 為了安全,如果一旦 refresh_token 被駭客等人員截獲到,他們就一直可以非法使用你的賬號
    • 即使一旦被截獲,只要使用者這邊重新整理就會重新獲取到新的 refresh_token,那麼以前的 被截獲的 refresh_token 就會失效

token的時間設定

token的時間設定需要看需求進行劃分區別設定:

PC網路應用

對於網路應用程式而言,由於token可以直接直觀地獲取到,因此不管是accessToken還是refreshToken為了安全起見,其過期時間都不應該設定得很長,且需要不停地更換token,因此PC網路應用的accessToken一般設定為2h過期,而refreshToken設定為1天到2天比較好,不足1天也是可以的,如果設定的時間比較短就在活躍期間時常重新整理freshToken就好了,如果設定的時間比較長,就只需要設定一個閾值(比如7day的refreshToken設定一個6day閾值),在refreshToken小於等於這個閾值的時候就進行重新整理refreshToken就好了。

手機應用

對於手機APP應用而言,登入操作一般只做一次,因此token的過期時間必是無限,即不會過期,不過為了安全起見(比如防止你丟手機),token應該以某種程度上對使用者可見(比如在安全中心裡檢驗了身份之後可以讓你看到哪些裝置有token,即哪些裝置會被允許登入)並可讓使用者對其進行一定程度上的操作(比如你手機丟了,然後登入安全中心移除那個手機的token,也就是移除那個手機的登陸許可權,從而使那個手機的應用上的你的帳號強制下線)

無效的Token的處理

對於頻繁更換的Token,如何處理舊的未過期的而又無效的Token,以下提供了幾個思路:

1) 簡單地從瀏覽器中移除token就好了

顯然,這種方式對於伺服器方面的安全而言並沒有什麼卵用,但它能透過移除存在的token來阻止攻擊者(比如,攻擊者必須在使用者下線之前竊取到token)

2) 製作一張token黑/白名單

在移除了瀏覽器儲存的token後如果還想要再嚴格點,就只能在伺服器上製作一張已經無效但是沒過期的token的黑/白名單了,在每次請求中都操作資料庫進行token的匹配,並以某種方式進行維護(不管是黑名單的定期刪除維護也好,白名單的無效時刪除也好),不過顯然這種方式還是違背了token無狀態的初衷,但是除此之外也沒別的辦法。

儲存可以按照userId—token的方式儲存在資料庫中(當然也可以按你喜歡新增其他欄位標明其他資訊,比如說mac地址啦,是手機還是電腦啦,裝置型號啦,巴拉巴拉巴拉····),白名單的話直接儲存有效的token,在需要token無效的邏輯中刪除指定token即可(比如重新整理token的時候把舊的無效的但未過期的刪掉)。而如果是黑名單的話就需要你定期去刪除其中已經過期的token了。

而驗證的話除了要去資料庫名單裡匹配之外還需要驗證token本身的有效性。

3)只需要將token的過期時間設定的足夠短就行了

如何重新整理Token(引用自github)

static refreshToken = (token): string => {
    let optionKeys = ['iat', 'exp', 'iss', 'sub'];
    let newToken;
    let obj = {};

    let now = Math.floor(Date.now()/1000);
    let timeToExpire = (token['exp'] - now);

    if (timeToExpire < (60 * 60)) { //1h
        for (let key in token) {
            if (optionKeys.indexOf(key) === -1) {
                obj[key] = token[key];
            }
        }

        let options = {
            expiresIn: '7 days',
            issuer: 'moi',
            subject: token.sub,
            algorithm: 'HS256'
        };

        newToken = JWT.sign(obj, Config.get('/jwtSecret'), options);
    }
    else {
        newToken = '';  //no need to refresh, do what you want here.
    }

    return newToken;
}

重新整理refresh Token的另一種思路(官網)

/**
 * Example to refresh tokens using https://github.com/auth0/node-jsonwebtoken
 * It was requested to be introduced at as part of the jsonwebtoken library,
 * since we feel it does not add too much value but it will add code to mantain
 * we won't include it.
 *
 * I create this gist just to help those who want to auto-refresh JWTs.
 */const jwt = require('jsonwebtoken');

function TokenGenerator (secretOrPrivateKey, secretOrPublicKey, options) {
  this.secretOrPrivateKey = secretOrPrivateKey;
  this.secretOrPublicKey = secretOrPublicKey;
  this.options = options; //algorithm + keyid + noTimestamp + expiresIn + notBefore
}

TokenGenerator.prototype.sign = function(payload, signOptions) {
  const jwtSignOptions = Object.assign({}, signOptions, this.options);
  return jwt.sign(payload, this.secretOrPrivateKey, jwtSignOptions);
}

// refreshOptions.verify = options you would use with verify function
// refreshOptions.jwtid = contains the id for the new token
TokenGenerator.prototype.refresh = function(token, refreshOptions) {
  const payload = jwt.verify(token, this.secretOrPublicKey, refreshOptions.verify);
  delete payload.iat;
  delete payload.exp;
  delete payload.nbf;
  delete payload.jti; //We are generating a new token, if you are using jwtid during signing, pass it in refreshOptions
  const jwtSignOptions = Object.assign({ }, this.options, { jwtid: refreshOptions.jwtid });
  // The first signing converted all needed options into claims, they are already in the payload
  return jwt.sign(payload, this.secretOrPrivateKey, jwtSignOptions);
}

module.exports = TokenGenerator;

測試模組:

/**
 * Just few lines to test the behavior.
 */

const TokenGenerator = require('./token-generator');
const jwt = require('jsonwebtoken');

const tokenGenerator = new TokenGenerator('a', 'a', { algorithm: 'HS256', keyid: '1', noTimestamp: false, expiresIn: '2m', notBefore: '2s' })
token = tokenGenerator.sign({ myclaim: 'something' }, { audience: 'myaud', issuer: 'myissuer', jwtid: '1', subject: 'user' })
setTimeout(function () {
  token2 = tokenGenerator.refresh(token, { verify: { audience: 'myaud', issuer: 'myissuer' }, jwtid: '2' })
  console.log(jwt.decode(token, { complete: true }))
  console.log(jwt.decode(token2, { complete: true }))
}, 3000)

來源:https://mp.weixin.qq.com/s/gt7T5nghTUN2alR10TIinA

分類: 科技
時間: 2021-10-11

相關文章

淘寶京東下架K12學科培訓商品,抖音快手不再直播帶“課”

淘寶京東下架K12學科培訓商品,抖音快手不再直播帶“課”
南都訊 隨著教育"雙減"工作的推進落地,最近多家電商平臺為響應國家"雙減"政策,下架K12學科類培訓課程,在淘寶.抖音.快手等直播平臺,校外培訓機構的" ...

承接淘寶京東抖音快手售前售後金牌客服外包服務託管
公司簡介: 詠客客服中心於2014年創立,經歷7年發展歷程:目前團隊成員1000+,服務國內一線品牌30多家,淘寶天貓拼多多店鋪合作總量超過40000家,2018年合作店鋪 GMV超 6億,旗下擁有花 ...

現如今,淘寶開店已經沒有出路,難道真的是這樣嗎?
未來10年,至少5年,有前途可考慮的領域包括:線上教育和文化工程師(知識IP)(教育教師是人工智慧無法完全取代的),更黑的黑科技(程式設計師依舊很吃香),電競領域(聯賽.直播平臺.主播等,騰訊前段時間 ...

淘寶直播雙11變身“雙入口”,直播帶貨下半場戰事開啟或將催生新巨頭

淘寶直播雙11變身“雙入口”,直播帶貨下半場戰事開啟或將催生新巨頭
淘寶直播使用者們不久後將會發現,在手淘主頁頂部的"訂閱"."推薦"旁,再增加"直播"入口,可直通直播場景,內容以全屏流的形式陳列,而原有的& ...

淘寶新增直播一級入口;QQ短暫解除外鏈限制後再封禁

淘寶新增直播一級入口;QQ短暫解除外鏈限制後再封禁
淘寶新增直播一級入口,推出"熱浪引擎" 9月17日,淘寶在一場面向商家和直播機構的生態大會上宣佈,淘寶首頁將為直播新增一級入口,並推出全新的內容商業化平臺"熱浪引擎&qu ...

K12學科課程被“圍剿”,在抖音、淘寶、快手等平臺被下架

K12學科課程被“圍剿”,在抖音、淘寶、快手等平臺被下架
今年年初,學科類教培機構的廣告投放被喊停,在此之後,眾多教培機構將期望的目光投向電商平臺及直播帶貨. "雙減"釋出後,教培機構的直播賣課步伐放緩,但受波及的教師們帶著資源及實力,試 ...

記者親測!QQ解除淘寶抖音網址遮蔽!網友:微信呢?

記者親測!QQ解除淘寶抖音網址遮蔽!網友:微信呢?
中新網客戶端北京9月17日電 (記者 吳濤)"QQ解除淘寶等網址連結遮蔽了!"不少網友發現後歡呼雀躍. 13日,工信部表示,已要求企業按照整改要求,務實推動即時通訊遮蔽網址連結等不 ...

當微信能開啟淘寶頁面,對於中國網際網路意味著什麼?

當微信能開啟淘寶頁面,對於中國網際網路意味著什麼?
網際網路的"柏林牆"似乎終於要倒了. 9月9日下午,工信部有關業務部門召開"遮蔽網址連結問題行政指導會",要求9月17日前各平臺必須按標準解除遮蔽,否則將依法採 ...

QQ 微信可跳轉淘寶了;PHP 仍然是最流行的伺服器端程式語言

QQ 微信可跳轉淘寶了;PHP 仍然是最流行的伺服器端程式語言
0.QQ 可跳轉抖音淘寶 在 QQ 上輸入淘寶網域名和抖音官網域名後,均可以實現跳轉至對應的網站,無需再複製連結到瀏覽器開啟.另外,在 QQ 上開啟淘寶網後可正常購買商品,極大的滿足了使用者的體驗需求 ...

阿里終於邁出第一步,阿里淘寶買東西可以讓微信好友代付

阿里終於邁出第一步,阿里淘寶買東西可以讓微信好友代付
網際網路大佬相互之間一直以來的壁壘總算慢慢地在衝破:微信慢慢取消外鏈瀏覽,支付寶.微信支付也不會再如同水火. 在淘寶的阿里新社群電商品牌"淘菜菜"中,付款方式現已不會再僅限支付寶, ...

QQ可直接跳轉淘寶抖音;微信單聊開放外部連結;美團推出極簡版

QQ可直接跳轉淘寶抖音;微信單聊開放外部連結;美團推出極簡版
QQ支援直接跳轉淘寶抖音 據Tech星球報道,9月16日晚間,在QQ上輸入淘寶網域名和抖音官網域名後,均可以實現跳轉至對應的網站,無需再複製連結到瀏覽器開啟.另外,在QQ上開啟淘寶網後可正常購買商品, ...

宮廷手藝幾近失傳 河北小夥在淘寶找到非遺傳承新路

宮廷手藝幾近失傳 河北小夥在淘寶找到非遺傳承新路
起源於春秋戰國的花絲鑲嵌工藝曾經多為皇室御用.雖然是一門已傳承千年的非遺工藝,但花絲鑲嵌也一度面臨著後繼無人的窘境.如今,河北小夥劉超在淘寶上嘗試了一條新的傳承之路:將花絲鑲嵌工藝用在年輕人喜歡的漢服 ...

淘寶首頁將為直播新增一級入口,阿里電商的內容戰略更進一步

淘寶首頁將為直播新增一級入口,阿里電商的內容戰略更進一步
記者 | 佘曉晨 編輯 | 直播帶貨走過熱鬧期,已經成為常態化的"流量工具".今年雙11,淘寶首頁將為直播新增一級入口.淘寶事業群直播事業部負責人程道放在近日的釋出會上表示,這一入 ...

二十年來就沒搞懂,《暗黑破壞神2》死靈法師到底能帶多少隻骷髏

二十年來就沒搞懂,《暗黑破壞神2》死靈法師到底能帶多少隻骷髏
不知道當年玩單機的你,有沒有將<暗黑破壞神2>的所有人物全都體驗一次呢? 說實話<暗黑2>這款遊戲真的算得上是博大精深,也難怪不少玩家研究了二十年.每個人物都有幾種技能樹,可以 ...

搞懂了這7個“烹飪原理”,我突然發現:自己竟然會做菜了

搞懂了這7個“烹飪原理”,我突然發現:自己竟然會做菜了
我曾經是個廚房小白,下廚經驗少之又少.別把雞蛋煎糊,能把菜炒熟,就是我曾經對自己的要求.後來,認識了幾個做菜很好吃的朋友,我突然覺得,做菜其實是件非常有趣的事情. 如果把出品的菜餚比作一幅畫,那廚子就 ...

淘寶,餓了麼、美團各種商品返利套路,你中招了嗎?
現在買東西都使用各種APP或者它的小程式. 像是常用的買各種東西的淘寶,京東,拼多多. 還有專門的外賣軟體餓了麼和美團. 而這些軟體無一例外都是有專門的返利軟體. 淘寶官方對應的是一淘(傻瓜式操作)和 ...

漫畫 | 一口氣搞懂 Serverless

漫畫 | 一口氣搞懂 Serverless
呃,我可能是別人眼中所說的不用奮鬥的一代. 大家喜歡聽的什麼多姿多彩的生活,我都經歷過一些些. 我家裡開的是連鎖超市,主要集中在幾個二線城市. 在我上小學的時候,各連鎖店裡開始裝電腦,購置並安裝了完整 ...

雙11預熱!淘寶推出新功能“種草機”5000萬人已加入

雙11預熱!淘寶推出新功能“種草機”5000萬人已加入
[CNMO新聞]CNMO瞭解到,隨著雙十一臨近,淘寶上線了"種草機"功能.該功能入口設定在淘寶APP首頁左下方的逛逛裡.新功能的目的是為了幫助消費者一鍵搞定雙11購物的目標,進入種 ...

魏延安:淘寶村不是淘寶村的未來——讀郭紅東等《中國縣域農村電子商務發展之路》
農村電商在幾年前一度成為學術領域的顯學,各方參與者眾多,全國性盛會頻頻,一時頗為壯觀,但這幾年逐漸迴歸常態,一些跟風研究者也不見了身影.然而,農村電商的蓬勃發展態勢卻一直在延續,並不斷髮生演變,是值得 ...