手機號碼一鍵登錄是最近兩三年出現的一種新型應用登錄方式,比之前常用的短信驗證碼登錄又方便了不少。登陸時,應用首先向用戶展示帶有本機號碼掩碼的授權登錄頁面,用戶點擊“同意授權”的按鈕之后,應用即可獲取到完整的本機號碼,從而完成用戶的登錄認證。在這個過程中,應用只要確認登錄用的手機號碼是在綁定了此號碼的手機上發起的即可認證成功,從這一點來看,它和短信驗證碼登錄并無本質區別,都是一種設備認證登錄方式。這篇文章就來捋一下其中的技術門道。
這幾年為了保護用戶的隱私安全,Android和IOS系統都限制了應用獲取本機號碼的能力,即使通過某些技術手段獲取到了本機號碼,這個號碼還可能是被篡改的,所以應用直接讀取本機號碼用于登錄是不可行的。那么這些應用是怎么獲取到真實的本機號碼的呢?答案是電信運營商,手機要打電話、要上網、要計費,運營商肯定能對應到正確的手機號碼。國內的運營商就是移動、聯通、電信這三家,它們都開放了這種能力。對于在互聯網大潮中被管道化的運營商來說,不失為一種十分有意義的積極進取。
手機流量上網的原理
手機號碼一鍵登錄是借助手機流量上網來實現的,所以先要搞清楚流量上網的原理。
目前網上已有很多關于一鍵登錄的技術文章,但是內容基本雷同,關于獲取手機號碼的部分,所述都是通過運營商的數據網關能力,語焉不詳,對于有追求的技術人來說,難以忍受。這個章節就來介紹下這種從數據網關獲取手機號碼的能力是如何實現的,因為通信專業知識十分繁雜,我也沒有經過專業的學習,大家也不想接觸到很多的專業名詞,所以這里只保留一些關鍵的專業名詞,盡量以通俗易懂的方式來理清這個機制。
五層網絡模型
對網絡比較熟悉的同學,應該了解五層協議,那么手機流量上網時的五層網絡模型有何不同呢?
從上圖可以看出,手機流量上網的主要區別在數據鏈路層和物理層。在數據鏈路層,流量上網沒有mac地址的概念,它采用一種點對點協議(PPP),手機端通過撥號方式建立這種PPP連接,然后發送數據。在物理層,流量上網通過手機內置的基帶模塊進行無線信號的調制、解調工作,從而實現與移動基站之間的電磁波通信。
流量上網的機制
點對點協議支持身份驗證功能,手機端發起連接時會攜帶自己的身份證明,一般就是手機卡內置的IMSI,這個IMSI也會保存在運營商的數據庫中,因此基站就可以驗證連接用戶的身份,當然這個驗證過程不是簡單的對比IMSI,會有更多安全機制。為了更清楚的了解流量上網機制,下面再來一張4G流量上網時手機與運營商的交互示意圖:
核心組件
手機:這其中對流量上網起到關鍵作用的就是手機卡和基帶模塊。手機卡中保存了IMSI,全稱International Mobile Subscriber Identification Number,國際移動用戶識別碼。IMSI是手機卡的身份標識。
基站:就是外邊常見的鐵架子信號塔,是一種能覆蓋一定范圍的無線電收發信息電臺,手機會連接到它,然后它再通過光纖連接到運營商網絡,從而實現移動通信。
MME:Mobility Management Entity,移動控制單元。手機建立連接時會先訪問到這里,負責:手機與基站的接入控制,手機卡的鑒權、會話管理、安全傳輸,漫游控制、跨運營商通信等。
HSS:Home Subscriber Server,歸屬簽約用戶服務器。保存本地簽約的手機卡信息,包括手機卡IMSI與手機號的對應關系,手機號的套餐信息、手機號的歸屬地信息等。
S-GW:Service Gateway,服務網關。4G環境下,用戶側與運營商核心網之間的業務網關。訪問能不能進入,能做什么業務,去哪里做業務,是在這里控制的。跨運營商計費、漫游計費等也在這里完成。
P-GW:PDN Gateway,PDN網關。運營商核心網與互聯網之間的網關,手機真正上網就是通過它了。它會給手機分配一個IP地址,控制上網的速度,對流量進行計費等。
PCRF:Policy and Charging Rules Function,策略與計費控制單元,保存每個用戶的網絡訪問策略和計費規則。
上網過程
為了方便理解,這里將上網的過程大致分為兩個部分(和上圖的1、2對應):
- 1 接入:建立連接時,手機攜帶IMSI信息,通過基站訪問到MME,MME通過HSS驗證IMSI信息,然后MME進行一些初始化工作,返回一些鑒權參數給手機,手機再進行一些計算,然后把計算結果返回給MME,MME驗證手機的計算結果,驗證通過則允許接入。這個過程保證了接入的安全,MME還為后續的數據傳輸提供了加密傳輸支持,保護數據不被竊聽和篡改,有興趣的同學可以去詳細了解下。 如果手機卡銷售的時候沒有寫入手機號,手機卡首次注冊登記的時候,運營商會從HSS中取出手機號,然后再寫入手機卡中。 實際應用中,為了防止跟蹤和攻擊,不是每次通信時都要攜帶IMSI,MME會生成一個臨時的GUTI對應到IMSI,就像Web程序中的SessionId。MME還有一定的機制控制GUIT的重新分配。
- 2 傳輸:手機網絡流量的傳輸,還是先要通過基站,然后下一步進入S-GW,S-GW會檢查用戶的授權,就像Web程序中檢查前端提交過來的SessionId,再看看用戶有沒有權限進行其提交的業務,這里就是看看用戶有沒有開通流量上網,這是S-GW通過連接MME實現的。S-GW處理完畢后,數據包會進入P-GW,P-GW在手機使用流量上網時會給用戶分配一個IP地址,然后數據包通過網關進入互聯網,訪問到相關的資源。P-GW還會對上網行為進行速率控制、流量計費等操作,這些策略來源于PCRF,PCRF中的規則是根據HSS中的用戶套餐、用戶等級等計算出來的。 對P-GW來說S-GW屏蔽了用戶的移動性,手機在多個基站切換時,S-GW不變。
以上就是手機流量上網的基本原理了,可以看到,運營商通過IMSI或者GUTI完全有能力獲取到當前上網用戶的手機號碼。對于運營商的一鍵登錄具體是怎么實現的,我并沒有找到相關的介紹,但是可以設想下:手機應用通過運營商的SDK發起獲取手機號碼的業務請求,此時會攜帶IMSI或者GUTI,業務請求到達S-GW,S-GW鑒權通過,然后將這個業務請求路由到運營商核心網中獲取手機號碼的服務,服務根據業務規則從HSS中取出手機號碼并進行若干處理。
一鍵登錄的原理
理解了手機流量上網的原理,再來看下一鍵登錄業務是如何實現的,這個部分屬于上層應用程序開發,大家應該相對熟悉一些。
如果你接入過微信的第三方應用登錄,或者其他類似的第三方應用登錄,過程是差不多的。還是先來看圖:
這里對一些關鍵步驟進行說明:
- 2預取手機號掩碼:這個手機號掩碼需要在請求用戶授權的頁面展示給用戶看,因為獲取這個信息要通過電信運營商的網絡,所以可能會比較慢,為了提升用戶體驗,可以在應用啟動的時候就去獲取,然后緩存一段時間。
- 8授權請求:因為應用獲取用戶手機號這個事比較敏感,必須讓用戶清楚地了解并授權之后才能進行,為了確保這件事,運營商的認證SDK提供了這個授權請求頁面,用戶確認授權后,SDK直接向運營商認證服務發起請求認證,認證服務會返回一個認證Token給應用。應用再通過自己的服務端拿著這個Token找運營商獲取手機號碼。
- 17生成應用授權Token:應用要維護自己用戶的登錄狀態,這里可以采用傳統的Session機制,也可以使用JWT機制。
- 3預取手機號掩碼 和 11請求認證,都需要通過手機蜂窩網絡通信,也就是說需要通過手機流量上網。如果手機同時開啟了流量和WIFI,認證SDK會將手機短暫切換到流量上網模式。如果手機沒有開啟流量,有些SDK還會在上次成功取號之后多緩存一個臨時Token,這樣也能成功實現一次一鍵登錄,不過這個限制性很大。
這里其實還有一個安全問題:
14登錄請求:用戶如果隨便造一個認證Token,然后就向應用服務提交請求,應用服務再向認證服務提交請求,這屬于一種跨站攻擊。雖然這個Token可以被阻止,但是不免浪費資源,給服務端帶來壓力。
這一點微信第三方應用登錄做得比較好,用戶登錄前,應用服務端先生成一個隨機數,然后應用前端向應用服務端提交時,帶著這個隨機數,應用服務端可以驗證這個隨機數。
號碼驗證場景
除了用于登錄,運營商網關的這種取號能力,還可以用在驗證手機號上,在某些關鍵業務上,比如支付過程中,要求用戶輸入本機手機號碼或者其中的某幾位,然后通過運營商認證服務驗證手機號是否本機號碼。
隱私保護問題
設備唯一標識問題
現在大家對隱私問題關注得越來越多了,經常會出現這種情況:你在某電商網站搜索了某個商品,然后訪問其它網站時,都向你推薦這類商品的廣告。還有一種感覺很恐怖的情況,你剛和某個人談論了某件事,然后就在某個App上看到了關于這件事的推薦,有人猜測是App在偷聽,不過基于目前的輿論和監督,偷聽風險太大,這其中的原因可能真的只是算法太厲害了。
最近幾年Android和iOS系統都對App獲取手機唯一標識進行了限制,比如IMEI、Mac地址、序列號、廣告Id等,目的就是防止用戶的信息在多個App之間進行關聯,導致泄漏用戶的隱私,產生一些安全問題和法律風險,前述跨App的廣告行為也自然受到了抑制。
在了解一鍵登錄的技術原理時,看到某運營商提供了一種和SIM卡綁定的設備唯一Id服務,宣傳語就是為了應對移動操作系統限制訪問手機唯一標識的問題,在現今越來越重視隱私保護的前提下,如果這種能力開放給了廣告平臺,就是開歷史的倒車了。
手機號作為身份標識的問題
對于國內普遍使用手機號登錄的方式,從技術上很難限制App之間進行手機號關聯,然后綜合分析用戶的行為。比如某家大廠運營了多款不同種類的熱門App,它就有能力更全面的了解某個用戶,如果要限制可能就得通過法律層面來解決了。至于不同廠商之間的手機號關聯行為,基于商業利益的保護,不太可能會出現。
在國內這種商業環境下,如果你真的對自己的隱私很關注,最好只使用賬號密碼的方式登錄,否則經常更換手機號可能是一種沒辦法的辦法。
手機號重新銷售問題
手機號的總量是有限的,為了有效利用手機號資源,手機號注銷以后,經過一段時間就會被運營商重新銷售。如果新的手機號擁有者拿著這個手機號登錄某個APP,而這個手機號之前已經在這個App上注冊過,產生了大量的使用記錄,那么此手機號前擁有者的隱私就會被泄漏。所以大家現在都不太敢隨便更換手機號,因為注冊過的地方太多了,留下了數不清的使用痕跡。
在了解一鍵登錄的技術原理時,還看到某運營商提供了一種“手機號更換綁定SIM卡通知”的服務,應用可以據此解綁重新銷售的手機號與應用賬號之間的關系,從而保護用戶的隱私。在上文中已經提過手機卡使用IMSI進行標識,如果手機號被重新銷售,就會綁定新的IMSI,運營商可以據此產生通知。當然運營商還需要排除手機卡更換和攜號轉網的情況,這些情況下手機號也會綁定新的IMSI。
不得不說運營商的這個服務還是挺贊的。
以上就是本文的主要內容了,因本人才疏學淺,如有錯漏,歡迎指正。