微信手机号码登录(十分钟搞懂手机号码一键登录)

手机号一键登录是近两三年才出现的新的应用登录方式,比之前常用的短信验证码登录方便很多。登录时,应用程序首先向用户显示带有本地电话号码掩码的授权登录页面。用户点击“同意授权”按钮后,应用可以获取完整的本地电话号码,从而完成用户的登录认证。在这个过程中,应用只要确认用于登录的手机号码是在与该号码绑定的手机上发起的,就可以成功认证。从这个角度来说,它与短信验证码登录没有本质区别,是一种设备认证登录方式。本文将看看技术门道。

近年来,为了保护用户的隐私,Android和iOS系统限制了应用程序获取自己电话号码的能力。即使通过某种技术手段获取了本地电话号码,也有可能被篡改,所以应用直接读取本地电话号码进行登录是不可行的。那么这些应用是如何获得真实的本地号码的呢?答案是电信运营商。手机要打电话,要上网,要收费。运营商肯定能对应到正确的手机号。国内的运营商是中国移动、中国联通、中国电信,都开放了这个能力。对于在互联网大潮中已经管道化的运营商来说,可以算是一个非常有意义的举措。

手机流量上网的原理

手机号一键登录是利用手机流量上网实现的,所以首先要了解流量上网的原理。

目前网上有很多关于一键登录的技术文章,但内容基本相同。至于关于获取手机号的部分,描述的只是通过运营商的数据网关能力,含糊不清,对于有追求的技术人员来说难以承受。本章将介绍这种从数据网关获取手机号码的能力是如何实现的。因为通信的专业知识很复杂,我没有学过专业,很多专业术语我们也不想接触。所以这里只保留一些关键的专业术语,用通俗易懂的方式把这个机制说清楚。

五层网络模型

熟悉网络的同学应该知道五层协议,那么手机上网时五层网络模型有什么区别呢?



从上图可以看出,手机流量和上网的主要区别在于数据链路层和物理层。在数据链路层,没有访问互联网流量的MAC地址的概念。它使用点对点协议(PPP)。手机通过拨号建立这个PPP连接,然后发送数据。在物理层,通过手机内置的基带模块对无线信号进行调制解调,实现与移动基站的电磁波通信。

流量上网的机制

对等协议支持认证功能。手机发起连接时会自带身份证书,通常是手机卡内置的IMSI。该IMSI也将存储在运营商的数据库中,因此基站可以验证连接用户的身份。当然,这个验证过程并不是简单的比较IMSI,还会有更多的安全机制。为了更好的理解流量上网的机理,这里再来一张4G流量上网时手机与运营商交互的示意图:

微信手机号



核心组件

手机:其中手机卡和基带模块是流量接入的关键。IMSI,全称国际移动用户识别号,保存在手机卡中。IMSI的身份是手机卡。

基站:是外面常见的铁架信号塔。它是一种可以覆盖一定范围的无线电收发站。手机会连接到上面,然后通过光纤连接到运营商的网络,实现移动通信。

MME:移动管理实体,移动控制单元。建立连接时,手机会先访问这里,负责:手机与基站之间的访问控制、手机卡的认证、会话管理、安全传输、漫游控制、跨运营商通信等。

归属用户服务器,归属用户服务器。保存本地签约的手机卡信息,包括手机卡的IMSI与手机号码的对应关系、手机号码的套餐信息、手机号码的归属地信息等。

服务网关,服务网关。4G环境下,用户端与运营商核心网之间的服务网关。准入,可以做什么业务,在哪里做业务都在这里控制。跨运营商计费、漫游计费等。也在这里完成。

PDN网关,PDN网关。运营商核心网和互联网之间的网关,手机可以通过这个网关接入互联网。它会给手机分配一个IP地址,控制上网速度,收取流量。

Pcrf:策略和计费规则功能,策略和计费控制单元,存储每个用户的网络接入策略和计费规则。

上网过程

为了便于理解,上网的过程大致分为两个部分(对应上面的1和2):

  • 1接入:连接建立时,手机携带IMSI信息,通过基站接入MME。MME通过HSS验证IMSI信息,然后MME进行一些初始化工作,返回一些认证参数给手机,然后手机进行一些计算,然后将计算结果返回给MME,如果验证通过,则允许接入。这个过程确保了访问的安全性。MME还为后续数据传输提供加密传输支持,保护数据不被窃听和篡改。有兴趣的同学可以多了解一下。如果手机卡卖的时候没有写手机号,那么第一次注册手机卡的时候,运营商会从HSS中取出手机号,然后写入手机卡。在实际操作中,为了防止跟踪和攻击,MME不会每次通信都携带IMSI,而是会生成一个临时的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直接向运营商的认证服务请求认证,认证服务会向应用返回一个认证令牌。然后,应用程序通过自己的服务器获取这个令牌,找到运营商以获取移动电话号码。
  • 17生成应用程序授权令牌:应用程序应该维护自己用户的登录状态。这里,可以使用传统的会话机制或JWT机制。
  • 3预取手机号码掩码和11请求认证都需要通过手机的蜂窝网络进行通信,也就是说通过手机流量访问互联网。如果手机同时开启了流量和WIFI,认证SDK会将手机短暂切换到流量上网模式。如果手机不开流量,有些SDK会在最后一次成功取号后缓存一个临时令牌,这样就可以成功实现一键登录,但这是很有限制性的。
  • 其实还有一个安全问题:

    14登录请求:如果用户随机创建一个认证令牌,然后向应用服务提交一个请求,应用服务再向认证服务提交一个请求,这就是跨站攻击。虽然这个令牌可以被屏蔽,但是不可避免的会浪费资源,给服务器造成压力。

    正因如此,微信第三方应用登录做得很好。在用户登录之前,应用服务器生成一个随机数,然后当应用前端提交给应用服务器时,应用服务器就可以用这个随机数验证这个随机数。

    数字验证场景

    除了登录,运营商网关的这种取号能力也可以用来验证手机号码。在一些关键服务中,比如支付过程中,需要用户输入本地手机号码或其中的一部分,然后使用运营商认证服务来验证该手机号码是否为本地电话号码。

    隐私保护问题设备唯一标识问题

    现在人们越来越重视隐私问题,经常会出现这样的情况:当你在某个电商网站上搜索某个产品,然后访问其他网站时,被推荐给你做这个产品的广告。还有一种情况很吓人。你刚和人聊了一件事,然后你在一个App上看到了关于这件事的推荐。有人猜测App在窃听,但基于目前的舆论和监管,窃听的风险太大,原因可能真的是算法太厉害了。

    近年来,Android和iOS系统都限制了app对手机唯一标识的访问,如IMEI、Mac地址、序列号、广告id等。目的是防止用户的信息在多个app之间关联,导致用户隐私泄露、一些安全问题和法律风险,前述跨app广告行为自然被抑制。

    在了解一键登录的技术原理时,看到某运营商为绑定SIM卡的设备提供唯一Id服务。口号是处理手机操作系统限制访问手机唯一标识的问题。在如今越来越重视隐私保护的前提下,如果将这种能力开放给广告平台,那将是一个历史的逆转。

    手机号作为身份标识的问题

    限制手机号码在app之间的关联,进而综合分析用户的行为,在技术上是有难度的。比如一个大厂运营着各种不同种类的热门app,它就有能力更全面的了解某个用户,如果要限制,可能就要通过法律层面来解决。至于不同厂商之间的手机号关联行为,不太可能出现基于商业利益的保护。

    在国内这种商业环境下,如果你真的很在意自己的隐私,最好只用账号密码登录,否则频繁更换手机号可能是一种无奈的办法。

    手机号重新销售问题

    手机号码总数有限。为了有效利用手机号码资源,手机号码注销后,一段时间后会被运营商转售。如果新的手机号机主用这个手机号登录了一个App,而这个手机号之前已经在这个APP中注册过,产生了大量的使用记录,那么这个手机号的原机主的隐私就会被泄露。所以现在的人都不敢随便换手机号了,因为注册地太多,留下了无数的使用痕迹。

    在了解一键登录的技术原理时,我们也看到某运营商提供了一项“手机换号SIM卡通知”的服务,应用通过该服务可以解除转售手机号与应用账号的绑定关系,从而保护用户的隐私。如上所述,手机卡是由IMSI识别的。如果手机号被转卖,会绑定一个新的IMSI,运营商可以据此生成通知。当然,运营商也需要排除手机卡更换和携号转网的情况。在这些情况下,手机号码还会绑定一个新的IMSI。

    不得不说运营商的这个服务还是挺好的。


    这是这篇文章的主要内容,因为我是一个糟糕的学习者。如有错漏,请指正。

    您可以还会对下面的文章感兴趣

    使用微信扫描二维码后

    点击右上角发送给好友