面试官:登录功能是怎么实现的?(下)

在上一篇“面试官:登录功能是怎么实现的?(上)”中,我们介绍了Cookie + Session 登录Token 登录SSO 单点登录的原理和流程,今天继续来介绍 OAuth2 第三方登录扫码登录以及一键登录

一、OAuth2 第三方登录

OAuth是一种常用的开放标准协议,用于在不同应用之间安全共享用户资源(如个人信息、照片、视频等)。目前已经发展到OAuth2.0版本,相较于1.0版本更加关注客户端开发者简易性,而且为桌面应用、web应用、手机设备提供专门认证流程。

而第三方登录则是OAuth协议中的一种应用场景。具体来说,第三方登录是指用户选择使用第三方平台的身份认证服务来登录某个应用程序。

OAuth2.0标准定义四种角色:

  • 认证服务器(Authorization Server):认证服务器是授权过程的“受信任的第三方”,负责颁发访问令牌(Access Token),用于访问资源服务器。

  • 资源服务器(Resource Server):资源服务器是托管受保护资源的服务器,例如照片、视频、个人资料等。

  • 客户端(Client):客户端是请求访问受保护资源的应用程序。它可以是Web应用程序,移动应用程序,桌面应用程序等。

  • 资源所有者(Resource Owner):资源所有者是拥有受保护资源的用户。他们授权客户端访问其资源。

其实 OAuth2.0 标准定义四种授权模式:

  • 授权码模式(authorization code)

  • 隐式模式(implicit)

  • 密码模式(password)

  • 客户端模式(client credentials)

四种授权模式中最常用的是授权码模式

授权码模式是指第三方应用先申请一个授权码,然后再用该码获取令牌。这种方式是最常用的流程,安全性也最高,它适用于那些有后端的 Web 应用。授权码通过前端传送,令牌则是储存在后端,而且所有与资源服务器的通信都在后端完成。这样的前后端分离,可以避免令牌泄漏。

基本流程

授权码方式授权大体上分为四步:

  • 第三方应用引导用户访问授权服务器,尝试获取用户授权,用户选择是否授权

  • 授权服务器获取到用户授权后,给应用服务器返回授权码

  • 应用服务器携带授权码向授权服务器请求令牌,授权服务器对授权码及客户端秘钥认证成功后发放令牌

  • 应用服务器携带令牌向授权服务器请求用户信息,授权服务器对令牌进行认证后返回所需信息

以微信登录为例,当用户在某个网站或应用上选择使用微信登录时,该网站会向微信发送一个授权请求,微信会提示用户确认授权,并返回一个令牌(access token)给该网站,该网站通过验证令牌的有效性后,即可实现用户的自动登录和获取用户的相关信息。

优势

相比于传统的用户名密码登录方式,第三方登录具有以下优势:

  • 便捷性:用户可以直接使用其已有的社交账号登录,无需再次注册或填写信息,提高了用户体验。

  • 安全性:第三方平台通常会对用户的信息进行加密存储和传输,在一定程度上提高了用户数据的安全性和保密性。

  • 防止账号被盗:由于用户不需要在每个应用中输入账号和密码,因此也降低了账号被盗的风险。

需要注意的是,虽然第三方登录可以提高用户体验和安全性,但也存在一些潜在的安全风险,例如用户授权过多、第三方平台信息泄漏等问题。

因此,在实际的开发和应用中,需要合理选择第三方平台、进行授权管理、保护用户隐私等措施,以确保用户数据的安全性和可靠性。

二、扫码登录

扫码登录是一种快捷方便的登录方式,用户只需要通过扫描二维码即可完成登录操作,无需输入用户名和密码等信息。在网页、APP 等应用中广泛应用,可以提高用户使用体验和安全性。

基本流程

以扫码登录某个网站为例:

  • 打开登录页面,展示一个二维码,同时轮询二维码状态(web)

  • 打开APP扫描该二维码后,APP显示确认、取消按钮(app)

  • 登录页面展示被扫描的用户头像等信息(web)

  • 用户在APP上点击确认登录(app)

  • 登录页面从轮询二维码状态得知用户已确认登录,并获取到登录凭证(web)

  • 页面登录成功,并进入主应用程序页面(web)

真实案例

以“前端面试题宝典”的 PC 端登录为例,就是使用了微信扫码能力和小程序的授权功能。

首先,PC 端在进行登录操作时,会从后端请求一个临时的小程序二维码进行展示,二维码中会包含一个 id 参数,并根据该 id 轮询扫码状态。

引导用户使用微信扫码后,会在微信中打开“前端面试题宝典”小程序,跳转到小程序中一个专门的授权登录页面,并在该页面会请求用户的部分数据。

用户确定授权后,会将授权数据同步给后端。

PC 端在下次轮询时拿到授权成功的状态及用户头像等数据,完成登录操作。

优势

扫码登录有以下优势:

  • 方便快捷:扫一下二维码即可完成登录,无需输入账号密码等信息,操作简单方便。

  • 安全性高:相比于传统的用户名和密码方式,扫码登录更加安全,因为扫描过程中不会暴露敏感信息,如密码等。

  • 体验好:扫码登录无需手动输入任何信息,对于移动设备尤其友好,用户体验更好。

当然,由于扫码登录需要使用到第三方平台,例如微信、支付宝等,可能会涉及到第三方的隐私问题和数据共享问题。

三、一键登录

一键登录,也叫“本机号码一键免密登录”,是指用户在移动端应用或网站中,通过验证手机号快速完成登录的方式。

这是一种更为“懒人”的验证方式,既不需要用户输入账号密码,也不需要输入手机号来获取短信验证码,接受协议后,直接由运营商帮助APP取号验证,用户可以点击一键登录。

相比于传统的账号密码登录方式,一键登录更加方便快捷,并且可以免除密码管理和找回密码等问题。

一键登录的原理

要使用一键登录,需要接入运营商的 SDK,三大运营商使用了同一套授权流程:

主要步骤如下:

  • SDK 初始化

调用 SDK 的初始化方法,传入项目在平台上的 AppKeyAppSecret

  • 唤起授权页

调用 SDK 唤起授权接口。SDK 会先向运营商发起获取手机号掩码的请求,请求成功后跳转到授权页。授权页会显示手机号掩码以及运营商协议给用户确认。

  • 同意授权并登录

用户同意相关协议,点击授权页面的登录按钮,SDK 会请求本次取号的 token,请求成功后将 token 返回给客户端。

  • 取号

将获取到的 token 发送到我们自己的服务器,由服务器携带 token 调用运营商一键登录的接口,调用成功就返回手机号码了。服务器用手机号进行登录或注册操作,返回操作结果给客户端,完成一键登录。

在没有插电话卡,或者关闭移动蜂窝网络的情况下,是无法完成认证的。所以就算接入了一键登录,我们也要兼容传统的登录方式,允许用户在认证失败的情况下,手动输入手机号登录。

最后

以上就是剩余几种登录方式的介绍。

如果你现在正在找工作,可以私信“web”或者直接添加下方小助理进群领取前端面试小册、简历优化修改、大厂内推以及更多阿里、字节大厂面试真题合集,和p8大佬一起交流。

猜你喜欢

转载自blog.csdn.net/Likestarr/article/details/135415413