当前位置:网站首页>使用 Abp.Zero 搭建第三方登录模块(一):原理篇
使用 Abp.Zero 搭建第三方登录模块(一):原理篇
2022-06-26 13:59:00 【林晓lx】
第三方登录是基于用户在第三方平台上(如微信,QQ, 百度)已有的账号来快速完成系统的登录、注册-登录等功能。
微信的鉴权
以微信的鉴权为例:
假如你的网站有一个扫码登录的功能,会弹出一个由微信提供的二维码页面,你需要用手机上的微信扫码,操作一下,就可以完成登录。如这个链接:


嗯。从研发和使用上来说这是最快捷,也是目前大部分站点用的扫码登录方式。但这个是依赖于微信开放平台的功能,微信作为鉴权服务的提供方,有义务监管第三方的网站(你的网站相对于微信就是第三方),因此你需要有企业或组织的营业执照,经过认证,才有资格申请这个功能。(听说认证还需要交钱,OMG)
对于个人来说,这显然不是一个可行的方式。
那么我们还有两个选择:
1. 微信公众号鉴权:你的网页在微信客户端中被访问,通过跳转至鉴权链接,弹出一个鉴权页面,操作一下即可完成登录,请阅读官方文档网页授权 | 微信开放文档 (qq.com)

这是不需要认证的,我认为从微信的角度来说,微信客户端的浏览器控件作为集成在微信里的功能,有能力把控鉴权链接是从已在微信后台登记的合法域名跳转的,但是你的网站仍然要备案和走https协议
2. 微信小程序鉴权:这与微信公众号鉴权类似,区别是微信小程序SDK提供了登录功能,小程序不需要认证,可获取用信息, 请阅读官方文档wx.login(Object object) | 微信开放文档 (qq.com)
第三方登录的流程
首先用户通过主动的确认授权,第三方平台会生成一个登录凭证,根据第三方平台的用户凭证, 登录凭证,返回会话令牌和用户在第三方账号的唯一Id,令牌用于获取第三方平台的账号信息,比如头像,昵称,地址,电话号码等,如果用户是第一次登录,则可以用这些账号信息建立一个系统账号。
登录凭证和令牌,都具有时效性
在微信鉴权中,相关的概念的具体为:
- 登录凭证:Code
- 会话令牌:SessionKey
- 账号的唯一Id:OpenId
- 用户凭证:AppId、AppSecret
思考如何实现自己的登录逻辑:
公众号的登录页面,和微信小程序可以通过扫码作为入口。再通过我们自己后端的鉴权服务,类似如下的流程
- 点击网页微信小程序登录,网页生成一个Token,调用getwxacode()接口,将scene设置为Token值,page设置为小程序鉴权页面,生成小程序码。
- 用户使用微信客户端扫码,进入小程序鉴权页面,从参数获取 scene(就是 Token),并调用后端接口,将Token作为Key记录至服务端Cache(Key/Value)中
- 用户在小程序中点击同意登录,调用 wx.login() 获取 Code,并调用后端接口,将该Code值录入到以Token为Key的Value中
- 与此同时网页在轮询调用查询Cache条目的接口,一旦获取到Token对应的Code值,表明完成授权
- 网页调用第三方登录接口,将Code值传给后端服务作为登录凭证。调用相关微信第三方登录接口,以换取SessionKey,OpenId,再利用SessionKey查询相关头像,昵称,地址,电话等信息返回
用户的操作路径:

经过对比与思考,我们用调用方式更简单的微信小程序的鉴权方式。后端采用.Net6 + Abp.Zero快速搭建用户系统,利用Abp.Zero集成的第三方登录功能快速实现微信登录。为了节省时间还需要一个现成的微信SDK库。
接下来,开始项目搭建
边栏推荐
- vmware部分设置
- Correlation analysis related knowledge
- Common evaluation indexes of classification model -- confusion matrix and ROC curve
- Combat readiness mathematical modeling 31 data interpolation and curve fitting 3
- 券商经理给的开户链接安全吗?找谁可以开户啊?
- Recent important news
- Complete diagram / Euler loop
- MySQL | basic commands
- 聊聊 RPA 方向的规划:简单有价值的事情长期坚持做
- Correlation of XOR / and
猜你喜欢

Relevant knowledge of information entropy

Hard (magnetic) disk (II)

Login authentication service

备战数学建模32-相关性分析2

Sword finger offer 40.41 Sort (medium)

ArcGIS batch export layer script

Leaflet loading ArcGIS for server map layers

Common controls and custom controls

Sword finger offer 06.24.35 Linked list

Intellij IDEA--格式化SQL文件的方法
随机推荐
Common controls and custom controls
Installation tutorial about origin2019
布局管理器~登录界面的搭建实例
Lucky numbers in the matrix
Transformers datacollatorwithpadding class
Understand the difference and use between jsonarray and jsonobject
C language | Consortium
Leaflet load day map
JVM 输出 GC 日志导致 JVM 卡住,我 TM 人傻了
信息学奥赛一本通 1405:质数的和与积 (思维题)
一篇抄十篇,CVPR Oral被指大量抄袭,大会最后一天曝光!
C | analysis of malloc implementation
C language | file operation and error prone points
券商经理给的开户链接办理股票开户安全吗?我想开个户
Atcoder 238
ArcGIS secondary development -- arcpy batch automatic map publishing service
Error when redis is started: could not create server TCP listening socket *: 6379: bind: address already in use - solution
Why is there always a space (63 or 2048 sectors) in front of the first partition when partitioning a disk
年薪50万是一条线,年薪100万又是一条线…...
Oracle11g database import and export method tutorial [easy to understand]