轻识Logo
目录

    基于 Authing.cn 的关注微信公众号登录的实现方案,以及和其他方案的对比

    为什么会有关注微信公众号登录的需求?

    在如今的互联网时代,微信公众号被越来越多的企业用于与用户之间的交流和沟通,其中包括用户的登录认证。通过关注公众号登录,不仅可以给公众号引流,而且能够将用户与公众号粉丝一一对应。最后,这种方式对于用户来说,也更加方便快捷。对于已经关注过公众号的用户来说,扫码后就直接进入登录状态了;对于新用户来说,仅需要多点一次关注的操作。

    本文内容

    本文将介绍如何使用 Authing.cn 来实现关注微信公众号登录的方案,并和我自己之前的几个实现方案做一个对比。

    最终方案展示

    可以访问: https://taro.jefftian.dev/pages/subpages/auth/authing(或者 https://taro.pa-ca.me/pages/subpages/auth/authing ),在登录框中选择“微信公众号关注”:

    使用微信扫描二维码后,会发现这是我的测试公众号。选择关注,网页就会自动登录;而如果之前已经关注过,在扫码后,网页会直接进入登录状态。如果是第一次扫码登录本网站(哈德韦的个人小程序),那么会出现如下的页面,允许你创建一个新账号,或者绑定到已有账号。

    同时,手机可以收到微信公众号发来的欢迎信息。这一块儿可以做更多事情,目前我的示例程序写得很简单,会发一条简单的欢迎信息:

    但是,由于测试公众号的限制,只能有100个粉丝。因此本演示只对前100名新用户有效。注意,如果是真正的服务号,就不用担心粉丝数量的限制了,但是申请微信的服务号,需要企业资质,个人开发者暂时没有办法申请。

    关注公众号登录的核心要件

    带参二维码

    这是服务号才有的能力,由微信提供。带参二维码本质上是一个动态生成的随机信息,用来标识当前会话。一旦有用户扫码,那么,该会话就和一个身份绑定起来了。

    这些都是微信服务和开发者服务之间进行的后端信息交换。首先,开发者服务需要通过凭据获取带参二维码;其次,在用户扫码后,开发者服务会接收到微信的消息通知。

    扫码状态的维护

    开发者服务需要对扫码状态进行维护,其键值是带参二维码对应的临时票据,其值可能是待扫码、已扫码和超时等。一旦某个临时会话收到了微信发来的有用户扫码的消息通知,就应将该会话转为已登录状态,而一个超时没有收到用户扫码消息通知的会话,应该通过某种方式标记出来。

    因为这个关注公众号登录的场景,一般用在 Web 端。所以常见的对扫码状态的更新查询,都是使用了定时轮询的方式。一旦扫码完成,就会在下一次轮询时得到状态更新,这个 HTTP 的响应,不仅在负载中携带了已扫码的状态,而且往往通过 HTTP 标头带上了 set-cookie 来将已验证的会话标识传给客户端。客户端(即 Web UI)会更新页面。

    对于多次轮询后,碰到超时的情况,页面往往更新为“请刷新二维码”之类的提示。

    其他方案及其与 Authing.cn 方案的对比

    先说结论,采用 Authing.cn 开发量最少,仅需要做一些配置即可。以上对核心要件的分析截图中,都没有任何自己的代码,全是 Authing.cn 实现的。尽管看不到 Authing.cn 的源码,但是从表现上看,却能够完全推测出其大致思路,这是由于无论采用具体方案去实现,只要是对接微信公众号关注登录,其核心要件是没有区别的。

    当然也可以看出,所谓低代码,甚至无代码,其实是在另外的地方产生了更多的代码。复杂性无法凭空消失,但是可以转移或者隐藏。在掌握了微信公众号关注登录的核心要件后,至于是自己写,还是用别人写的,都不会再有神秘感了。

    基于 Keycloak 的微信公众号关注即登录方案实现

    详见《 基于 keycloak 的关注公众号即登录功能的设计与实现》,该方案基于开源的身份认证系统 Keycloak,魔改了一个微信 OAuth 2.0 的登录插件而实现,它将关注公众号插件作为 Keycloak 的一个身份提供者程序。

    当时写这个方案前,Authing.cn 还没有正式推出微信公众号关注登录的方案(也许内部已经实现了,但文档中没有体现)。后来我在一篇对比 Keycloak 和 Authing.cn 的文章中指出了这一点,他们立即就更新了文档,正式推出了微信公众号关注登录的方案,反应十分迅速,必须点赞。

    这个方案的难点是必须学习一下 Keycloak,并且基于其提供的接口做二次开发。我的实现基于另一个开源插件进行了魔改,其中扫码状态维护在了内存中,因此只适合于一个服务器实例的 Keycloak。

    基于 Keycloak 做开发也有好处,那就是登录 UI 等等已经有现成的可以直接利用,账号绑定等等也有系统中现有的整套流程。

    基于 Java Spring Security 的微信公众号关注即登录方案实现

    详见《 基于 Java Spring Security 的关注微信公众号即登录的设计与实现》。该方案需要结合 Spring Security,通过自定义的方式实现登录态。

    之所以做这个方案,是由于收到了一些知乎上的咨询。给我的感觉,国内用 Java、或者说 Spring 框架非常多,有一个团队使用了 Spring Security,希望能加入微信公众号关注即登录的功能,于是我做了一个最小的示例。同时,为了避免单实例服务的限制,将扫码状态维护到了外部存储。这个工程会依赖 Apache Pulsar。

    这个方案的难点在于一切从 0 开始,所以 UI 上特别简陋,另外还需要学习一下 Spring Security。

    以上是对自己在微信公众号关注即登录做的一个简要回顾,下面详述如何使用 Authing.cn 来实现它。

    什么是 Authing.cn

    Authing.cn 是一家提供身份认证与授权服务的云平台,拥有完善的身份认证、授权管理等功能。通过 Authing.cn,您可以快速搭建安全可靠的用户认证和授权系统。

    实现方案

    步骤一:注册 Authing.cn 账号

    首先,我们需要在 Authing.cn 上注册账号,步骤非常简单,只需要填写一些基本的信息即可。

    步骤二:创建应用

    在注册成功后,我们需要创建一个应用,应用是一个集成了身份认证、授权管理等功能的单元。在创建应用时,需要填写应用名称、应用回调地址等信息。

    步骤三:配置微信公众号登录

    接下来,我们需要在 Authing.cn 上配置微信公众号登录,具体操作如下:

    1. 在社会化身份源中添加一个微信身份源。

    2. 在这个身份源中添加微信公众号关注:

    3. 填写相应的 AppID 和 AppSecret,并保存。这个 ID 和 Secret 以及令牌,都要和微信公众号后台配置一一对应。由于我没有公司,申请不了服务号。但是好在微信提供了测试公众号,拥有和服务号相同的能力,只是有 100 个粉丝的上限。以下截图中的 appID、appsecret 以及 Token 对应上图中框出来的值。另外,接口配置信息里,有一个 URL,这个后面我们进行详解。这个接口,是用来接收微信发来的消息的。

    步骤四:集成登录功能

    在完成上述步骤后,我们需要在应用中集成登录功能。具体集成方式可以参考 Authing.cn 提供的文档。

    如果仔细查看 Authing.cn 的文档,已经 GitHub 上的代码示例,会发现,他们提供了两种集成的方式。第一种方式,是在上图中的 URL 直接填入 Authing.cn 提供的接口地址。这样有一些弊端,一是只能使用 Authing.cn 来进行微信公众号关注登录了;二是,微信发送的其他消息也都会被该接口接收,如果还有其他业务需求,就不太好做了。

    第二种方式,就是在上图中的 URL 填入自己的接口地址,而在自己的接口中,将收到的扫码信息,转发给 Authing 的服务器即可。非常推荐这个方式,而如上图所示,我填入的也是自己的服务接口,采用的就是这个转发的方案。所以,除了最开头的效果展示中的集成了 Authing.cn 的微信公众号关注登录可以正常运行外,几年前实现的基于 Keycloak 的微信公众号关注登录以及基于 Spring Security 的微信公众号关注登录,都能继续工作。

    采用第二种方式,最关键的是要将微信发来的消息,原封不动地转发给 Authing,这个转发目的地址,官方文档也有说明,对于我来说,这个地址就是: https://core.authing.cn/connections/social/brickverse-public/620097b69a9dab5e967d0c44/events

    总结

    通过上述步骤,我们可以快速实现关注微信公众号登录的功能,而且不需要过多的开发工作。借助 Authing.cn,我们可以快速搭建安全可靠的用户认证和授权系统,为企业的用户管理提供了有力的支持。














    浏览 77
    点赞
    评论
    收藏
    分享

    手机扫一扫分享

    举报
    miniweather基于koa的微信公众号开发
    Koa2从零开始微信开发如果你觉得这个代码有点帮助的话,请点击下面搬瓦工链接注册一下,我也收获点aff支撑服务器运营:搬瓦工基础会话微信部分接口功能模块主动调用接口微信网页开发
    miniweather基于koa的微信公众号开发
    0
    miniweather基于koa的微信公众号开发
    Koa2从零开始微信开发如果你觉得这个代码有点帮助的话, 请点击下面搬瓦工链接注册一下, 我也收获点
    miniweather基于koa的微信公众号开发
    0
    实现用户一键登录的方案有哪些?
    编程帮
    0
    实现用户一键登录的方案有哪些?
    python爬虫人工智能大数据
    0
    实现用户一键登录的方案有哪些?
    泥瓦匠BYSocket
    0
    dotnetopenid.NET的OpenID 实现方案
    dotnetopenid 是 .NET 平台上的 OpenID 实现方案 主要特性有: * Open
    dotnetopenid.NET的OpenID 实现方案
    0
    程序员关注的高质量公众号
    视学算法
    0
    dotnetopenid.NET的OpenID 实现方案
    dotnetopenid是.NET平台上的OpenID实现方案主要特性有:*OpenID1.x/2.0supportforbothProvidersandRelyingParties*SimpleRe
    dotnetopenid.NET的OpenID 实现方案
    0
    推荐值得关注的公众号
    明天上线
    0
    点赞
    评论
    收藏
    分享

    手机扫一扫分享

    举报

    PHP网站源码南联SEO按效果付费坪地网站建设同乐标王南山SEO按效果付费丹竹头外贸网站制作福永营销网站罗湖百度网站优化排名福永网站优化按天扣费民治高端网站设计同乐模板网站建设南山网站建设设计福永百度seo大鹏百搜词包观澜网站推广方案福永设计网站木棉湾高端网站设计大鹏百度网站优化观澜优秀网站设计塘坑网站建设设计坪地网站优化排名平湖百度竞价吉祥网络广告推广南山企业网站设计福永关键词排名福田标王广州如何制作网站南山企业网站建设罗湖关键词按天扣费横岗百度爱采购广州模板制作歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

    PHP网站源码 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化