掃描二維碼登錄原理

?????? 手機(jī)掃碼二維碼實(shí)現(xiàn)登錄某個(gè)網(wǎng)站的操作過程為旬蟋,手機(jī)登錄某個(gè)APP灯变,利用“掃一掃”功能掃描網(wǎng)頁(yè)上的二維碼,掃描成功后菜循,提示“登錄網(wǎng)頁(yè)版XX”翘地,同時(shí)網(wǎng)頁(yè)上顯示“成功掃描 請(qǐng)?jiān)谑謾C(jī)點(diǎn)擊確認(rèn)以登錄”,手機(jī)端點(diǎn)擊“登錄網(wǎng)頁(yè)版XX”癌幕,網(wǎng)頁(yè)跳轉(zhuǎn)到用戶登錄后的首頁(yè)衙耕。

? ? ? 整個(gè)掃碼登錄的操作過程還是挺簡(jiǎn)單的,而且交互地實(shí)時(shí)性比較好勺远,如果網(wǎng)絡(luò)不是非常阻塞橙喘,整個(gè)過程還是非常快的胶逢。那它是如何實(shí)現(xiàn)的呢厅瞎?

? ? 其基本思想是,PC瀏覽器首先獲得一個(gè)臨時(shí) id初坠,這個(gè)id用二維碼包裝著和簸,并且設(shè)置了有效時(shí)間,這個(gè)id不是UID(user ID)碟刺,只是一個(gè)唯一的由字母和數(shù)字組合成的標(biāo)識(shí)符锁保。然后等待客戶端掃描帶有此 id 的二維碼,二維碼的轉(zhuǎn)碼規(guī)則是統(tǒng)一的,所以意味著爽柒,只要是個(gè)二維碼掃描軟件吴菠,誰都能拿到這個(gè)鏈接。拿到鏈接沒有用浩村,重要的是誰拿到鏈接(即電腦端是如何知道是哪個(gè)APP賬號(hào)掃的它)做葵。PC端瀏覽器通過長(zhǎng)連接或不斷輪詢某個(gè)登錄授權(quán)接口,查看與此id關(guān)聯(lián)的二維碼是否被手機(jī)客戶端掃描心墅。手機(jī)客戶端掃描時(shí)蜂挪,會(huì)給后端服務(wù)器(無論手機(jī)還是網(wǎng)頁(yè)都對(duì)應(yīng)著后端同一個(gè)或有相互關(guān)系的服務(wù)器)傳送這個(gè)id,即發(fā)送一條信息給服務(wù)器嗓化,告訴服務(wù)器棠涮,現(xiàn)在是誰使用了這個(gè)二維碼鏈接。服務(wù)器在收到這個(gè)id后刺覆,在給PC瀏覽器的長(zhǎng)連接或輪詢請(qǐng)求中響應(yīng)一些不同的信息說明該二維碼鏈接被掃描了严肪,并要求在手機(jī)端去確認(rèn)。當(dāng)手機(jī)客戶端點(diǎn)擊確認(rèn)后谦屑,pc瀏覽器端會(huì)獲得服務(wù)器授信的令牌(或設(shè)置的sessionID)驳糯,這樣PC瀏覽器就可以攜帶這個(gè)令牌進(jìn)行隨后的信息交互。 圖示如

? ? ?二維碼鏈接在超時(shí)氢橙、網(wǎng)絡(luò)斷開酝枢、其他設(shè)備上登錄后,此前獲得的令牌或丟失悍手、或失效帘睦,對(duì)授權(quán)過程形成有效的安全防護(hù)。

下面看一下某公司掃碼登錄的過程坦康,首先看一下網(wǎng)站給出的二維碼竣付,

實(shí)際上任何一個(gè)二維碼表示的都是一串字符串。通過草料二維碼網(wǎng)站解析出這張二維碼表示的是如下字符串:

http://mtest.[公司域名]/passport/scan_login.php?scan_source=pc&code=201903131952062593943457001ba84b

其中code是當(dāng)前網(wǎng)頁(yè)給出的一個(gè)唯一ID滞欠。每當(dāng)打開一次或刷新一次古胆,都會(huì)生成一個(gè)含有唯一id的二維碼,確定登錄用戶的唯一性筛璧。

當(dāng)打開了二維碼登錄頁(yè)面后逸绎,我們通過控制臺(tái)看網(wǎng)路請(qǐng)求,會(huì)發(fā)現(xiàn)網(wǎng)頁(yè)在輪詢調(diào)用接口:


如果沒有掃碼夭谤,返回的是:

jsonp1552477921883({

???????? "returnval":1001

})

如果手機(jī)掃了碼棺牧,手機(jī)端會(huì)發(fā)送一次http://mtest.[公司域名]/index.php請(qǐng)求


該請(qǐng)求會(huì)攜帶二維碼的id,它的返回信息:成功設(shè)置狀態(tài)為已掃描待登錄沮翔。但是手機(jī)上沒點(diǎn)擊“確認(rèn)登錄”的話陨帆,瀏覽器上繼續(xù)輪回接口,

但這時(shí)接口返回的是

jsonp1552477921887({

???????? "returnval":1002

})

可見狀態(tài)已發(fā)生了變化采蚀,當(dāng)手機(jī)端點(diǎn)擊“確認(rèn)登錄”后疲牵,手機(jī)端又調(diào)用一次http://mtest.[公司域名]/index.php請(qǐng)求

這次請(qǐng)求的返回信息:登錄成功。而且與上次請(qǐng)求攜帶的參數(shù)幾乎一樣榆鼠。

此時(shí)查看pc端輪詢接口的請(qǐng)求和響應(yīng)如下纲爸,


接口返回的是:

jsonp1552477921895({

???????? "returnval":1003

})

這個(gè)請(qǐng)求響應(yīng)中,服務(wù)器同時(shí)設(shè)置了sessionID和其他一些cookie信息

HTTP/1.1 200 OK

Server: nginx/1.2.0

Date: Wed, 13 Mar 2019 11:52:39 GMT

Content-Type: text/html

X-Powered-By: PHP/5.2.10

.......

Set-Cookie: sessionID=pc_8d08c656a23b4156c173a4554db993fde21fad3dcab7bcf4bbfbb1e85fcccaa0;path=/; domain=[公司域名]

Content-Encoding: gzip

Vary: Accept-Encoding

Transfer-Encoding: chunked

Connection: Keep-alive

?

jsonp1552477921895({"returnval":1003})

? ? ?這樣就PC瀏覽器就得到了session信息妆够,后續(xù)的會(huì)話就可以免登陸了识啦。



我只是知識(shí)的搬運(yùn)工,如有侵權(quán)神妹,請(qǐng)留言颓哮,分分鐘刪除。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末鸵荠,一起剝皮案震驚了整個(gè)濱河市冕茅,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蛹找,老刑警劉巖姨伤,帶你破解...
    沈念sama閱讀 217,826評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異庸疾,居然都是意外死亡乍楚,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門届慈,熙熙樓的掌柜王于貴愁眉苦臉地迎上來徒溪,“玉大人,你說我怎么就攤上這事金顿〈什常” “怎么了?”我有些...
    開封第一講書人閱讀 164,234評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵串绩,是天一觀的道長(zhǎng)缺虐。 經(jīng)常有香客問我,道長(zhǎng)礁凡,這世上最難降的妖魔是什么高氮? 我笑而不...
    開封第一講書人閱讀 58,562評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮顷牌,結(jié)果婚禮上剪芍,老公的妹妹穿的比我還像新娘。我一直安慰自己窟蓝,他們只是感情好罪裹,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,611評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般状共。 火紅的嫁衣襯著肌膚如雪套耕。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,482評(píng)論 1 302
  • 那天峡继,我揣著相機(jī)與錄音冯袍,去河邊找鬼。 笑死碾牌,一個(gè)胖子當(dāng)著我的面吹牛康愤,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播舶吗,決...
    沈念sama閱讀 40,271評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼征冷,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了誓琼?” 一聲冷哼從身側(cè)響起资盅,我...
    開封第一講書人閱讀 39,166評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎踊赠,沒想到半個(gè)月后呵扛,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,608評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡筐带,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,814評(píng)論 3 336
  • 正文 我和宋清朗相戀三年今穿,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片伦籍。...
    茶點(diǎn)故事閱讀 39,926評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡蓝晒,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出帖鸦,到底是詐尸還是另有隱情芝薇,我是刑警寧澤,帶...
    沈念sama閱讀 35,644評(píng)論 5 346
  • 正文 年R本政府宣布作儿,位于F島的核電站洛二,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏攻锰。R本人自食惡果不足惜晾嘶,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,249評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望娶吞。 院中可真熱鬧垒迂,春花似錦、人聲如沸妒蛇。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至吏奸,卻和暖如春欢揖,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背苦丁。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工浸颓, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留物臂,地道東北人旺拉。 一個(gè)月前我還...
    沈念sama閱讀 48,063評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像棵磷,于是被迫代替她去往敵國(guó)和親蛾狗。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,871評(píng)論 2 354