時至今日,各大互聯網公司都已提供並鼓勵使用掃碼登陸功能。掃碼登陸經過二維碼在設備之間傳遞信息,使得用戶可使用安全可信任的設備(好比本身的手機)來控制不可信任的設備上的登陸行爲。其省去了在不便手動輸入的設備(好比電視)上輸入的環節,因此更方便;避免了在安全等級低的設備和環境(好比公共電腦、Web頁面)中輸入密碼,所以更安全。
本文分析二維碼掃碼登陸功能一般的實現方式,並重點總結實現過程當中須要注意的安全點。安全

掃碼登陸流程有如下幾個步驟:token
- 非授信設備訪問服務端生成token,並將token經過二維碼展現在界面上;
- 授信設備掃描展現在非授信設備上的二維碼,獲取到token;
- 授信設備使用token訪問服務端獲取非授信設備的設備信息,並將非授信設備的設備信息展現在界面上,請用戶確認;
- 用戶確認在授信設備上確認後,授信設備訪問服務端,告知服務端該token已被用戶確承認用來登陸;
- 非授信設備使用token登陸。非授信設備並不知道用戶什麼時候會確認,因此須要輪詢服務端,一直使用token嘗試登陸,直到成功;
須要注意的安全點有:接口
- 全部接口訪問,要使用https;
- token要有一個較短的有效期好比5分鐘,且一次有效,用過即失效;
- 流程中第4步:展現被掃碼端設備信息並請用戶確認,必須有,不能省略;
- 總結以上兩點,token有四個狀態:NEW(新生成)、SCANNED(已掃描待確認)、CONFIRMED(已確認)、USED(已使用);
- 相應的,流程中第5步,使用token嘗試登陸可能有5種返回:token不合法、待掃描、已掃描待確認、登陸成功並返回用戶登陸憑證、token已被使用過,失敗的狀況能夠展現相應的信息以提高用戶體驗;
- token只容許在生成該token的設備上進行登陸,這須要有支持防僞造的惟一標識設備的能力,好比設備指紋;
- 掃碼端必須是授信設備;
- Web端不能成爲掃碼端;
- 必要時,第3步和第4步,可使用非HTTP協議;
- 本文不討論服務端安全,好比token怎樣存儲等;
- 就想到這麼多:)