spring security oauth2 实现微信登陆(授权回调域、前端重定向、微信解绑、获取用户信息中文乱码等相关问题解析)

OAuth 的核心

OAuth 的核心就是向第三方应用颁发令牌。OAuth提供了四种获取令牌的授权方式
授权码(authorization-code)、隐藏式(implicit)、密码式(password)、客户端凭证(client credentials)。
而微信登陆采用的是授权码模式。

背景

目前项目大多都是采用前后端分离模式开发。本文前端采用 vue ,后端采用spring boot + spring cloud 实现的一套微服务架构,
采用独立的授权服务器进行网站授权、颁发token。
当然开发微信登陆需要去微信开放平台https://open.weixin.qq.com注册用户,添加网站应用如:
网站应用
并获取appid、appSecret、redirect_uri。
appid:应用唯一标识微信通过这个id来识别是那个网站应用来访问的。
appSecret:应用接口使用密钥,要严格保密。一般保存在后台服务器上。
redirect_uri:微信开放平台授权回调域,用户扫描二维码并同意授权之后回调的域名。

开发整个流程:

  1. 第三方发起微信授权登录请求,微信用户允许授权第三方应用后,微信会拉起应用或重定向到第三方网站,并且带上授权临时票据code参数;
  2. 通过code参数加上AppID和AppSecret等,通过API换取access_token、openid;
  3. 通过access_token进行接口调用,获取用户基本数据资源或帮助用户实现基本操作。

开发

一、vue前端页面展示微信二维码(将微信二维码内嵌到我们自己的网站上)
通过阅读微信开放平台上的文档我们了解到。
当需要展示微信二维码时,我们需要实例化一个js对象

 var obj = new WxLogin({self_redirect:true,id:"login_container", appid: "", scope: "", redirect_uri: "",state: "",style: "",href: ""});

redirect_uri中的地址需要处理一下的。处理方式:通过JavaScript encodeURIComponent() 函数。
参数说明
参数说明
当然只实例化这个js对象是无法展示二维码的,我们需要引入微信官方提供的js文件。
在vue的生命周期函数mounted中。

mounted() {const s = document.createElement('script');s.type = 'text/javascript';s.src = 'http://res.wx.qq.com/connect/zh_CN/htmledition/js/wxLogin.js';document.body.appendChild(s);},

二、授权回调域
实例化js对象时。我们写了redirect_uri回掉域名。我是将回掉地址放到了前端页面,然后通过回调地址中时候带有code参数来判断,是否向后台发送接口请求(用户拒绝授权时,回掉地址上回没有code参数的)
1、如果回掉地址中带有code则发送后台接口访问。
后台配置文件中添加
参数

使用如下链接:https://api.weixin.qq.com/sns/oauth2/access_tokenappid=%s&secret=%s&code=%s&grant_type=authorization_code
发送一个http请求获取openid、access_token。
然后通过
https://api.weixin.qq.com/sns/userinfo?access_token=%s&openid=%s&lang=zh_CN
可以拿到用户的相关信息。

三、前端重定向
用户有可能在不同的页面进行点击登陆,因此当用户登录成功之后需要重定向到用户点击登陆的地址也是非常不错的用户体验。
我采用的是通过Cookie,用户点击登陆时,我就将当前页面的路径保存到Cookie中,然后通过访问后台接口返回的参数来确定用户是重定向到点击登陆页面还是重定向到其他页面。
this. r o u t e . q u e r y : 参 数 。 可 以 获 取 路 径 上 的 参 数 。 t h i s . route.query:参数。可以获取路径上的参数。 this. route.querythis.router.push({path: Cookie.get(“loginUrl”),query:{‘type’: 2}}):可以重定向到Cookie保存的路径,query是路径上的参数。
this.$route.path:获取当前路径。

四、微信解除绑定
首先微信开放平台上没有提供相关接口。
我采用的还是绑定那一套,获取用户openid,然后在我们本地上去除绑定即删除用户保存的openid。
五、请求微信接口数据乱码
根据微信提供的接口
https://api.weixin.qq.com/cgi-bin/user/info?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN
我们可以获取到用户信息,但是通常情况下数据都是乱码的。
因为微信那边采用的是“ISO-8859-1”编码,而我们一般采用“UTF-8”,编码不统一导致的乱码。
既然问题的原因找到了,那我们就开始解决吧:
通过微信提供的公共接口获取的信息是一个JSON字符串
将JSON字符串通过“ISO-8859-1”解码,然后通过“UTF-8”编码成一个新的JSON字符串,此时就可以解决获取用户信息中文乱码问题。
示例代码:

json = new String(vxUserDetail.getBytes("ISO-8859-1"), "UTF-8");

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/27162.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring Security OAuth2 优雅的集成短信验证码登录以及第三方登录

基于SpringCloud做微服务架构分布式系统时,OAuth2.0作为认证的业内标准,Spring Security OAuth2也提供了全套的解决方案来支持在Spring Cloud/Spring Boot环境下使用OAuth2.0,提供了开箱即用的组件。但是在开发过程中我们会发现由于Spring Se…

谷歌Google Authenticator实现双因素认证

参考: https://www.cnblogs.com/hanyifeng/p/kevin4real.html 介绍:什么是双因素认证 双因素身份认证就是通过你所知道再加上你所能拥有的这二个要素组合到一起才能发挥作用的身份认证系统。双因素认证是一种采用时间同步技术的系统,采用了…

Google-Authenticator双因子认证

简介:Google-authenticator是基于时间的一次性密码算法(TOTP)是一种根据预共享的密钥与当前时间计算一次性密码的算法。它已被互联网工程任务组接纳为RFC 6238标准[1],成为主动开放认证(OATH)的基石&#x…

通过谷歌身份验证器实现双保险认证(1)

目录 一、谷歌身份验证器 二、下载谷歌验证器 1.linux端下载 2.手机端下载 三、linux端安装 1.安装环境 2.解压 3.编译安装​编辑 4.使用 一、谷歌身份验证器 谷歌身份验证器(google authenticator)是谷歌推出的基于时间的一次性密码&#xff08…

微信消息推送配置token验证

留一篇帖子来避坑 在接口配置修改中,微信官方需要验证你申请时填写的url能够正常响应,会给你填写的url接口发送get请求,接口需要正确返回才能都配置成功。我按照指引查看文档: 这狗官方只给php示例也就算了,这php的代码…

四、登录验证功能

登录验证. 用户访问任何业务资源,都需要进行登录验证. *只有登录成功的用户才能访问业务资源 *没有登录成功的用户访问业务资源,跳转到登录页面 分析 1.过滤器 ①implements Filter{ init doFilter destroy } ②配置过滤器web.xml 2.拦截器: ①提供拦截…

用双因子认证2FA替换Google authenticator谷歌令牌,助力准上市公司实现等保安全审计

21世纪初,某人力资源科技公司试水HR SaaS赛道,以大客户为目标客群,持续深耕,稳扎稳打,如今已是一家专门为中大型企业提供一体化HR SaaS及人才管理产品/解决方案的头部企业。其产品覆盖了从员工招募、入职、管理到离职的…

5 客户端认证 OAuth2ClientAuthenticationFilter

客户端认证 https://openid.net/specs/openid-connect-core-1_0.html#ClientAuthentication https://www.iana.org/assignments/oauth-parameters/oauth-parameters.xhtml#token-endpoint-auth-method 当访问 OAuth2 相关接口时(/oauth2/token、/oauth2/introspect、…

outlook突然变得很慢很卡

​outlook之前用的好好的,突然有一天变得很卡,特别是在上传附件后。 可能原因:没有勾选使用缓存Exchange模式,导致没有生成本地的同步ost文件,而是直接从服务器存取数据。 对应解决办法:到账户设置里&#…

学术海报Poster-- 模板分享

学术海报Poster-- 模板分享 0、引言1、下载地址百度网盘链接地址CSDN托管 2、模板样例 ⚠申明: 未经许可,禁止以任何形式转载,若要引用,请标注链接地址。 全文共计3077字,阅读大概需要3分钟 🌈更多学习内容…

世界杯球队分析

文章目录 1. 本文思路2.数据介绍2.1 results.csv数据集2.2 shootouts.csv数据集 3. 数据分析3.1 多维度分析3.2 数据分析案例3.2.1 导入模块3.2.2 导入数据1.遍历目录2.读取数据 3.2.3 查看描述数据1.查看数据2. 获取所有世界杯比赛的数据3. 查看包含FIFA的类型4. 获取世界杯数…

NBA比赛数据分析与预测

我的任务利用13到16年的NBA比赛统计数据,去预测17年的每场NBA比赛。数据是从http://www.basketball-reference.com/这个网站获得的。前期参考了https://www.shiyanlou.com/courses/782/labs/2647/document这里的分析与实现方法。这个实验楼里实现用了LogisticRegres…

使用python爬取足球比赛数据,关于足球预测策略模型,这是我见过唯一三年都盈利的

市场上有很多基于程序自动化的足球预测模型,我本人也不断摸索,自学python,最终实现了程序预测的自动化,并且验证了很多策略,几乎所有的模型都是阶段性表现很不错,但是长期总体下来,都达不到预期…

大数据+NCAA=?球迷情绪预测体育赛事结果

点击上方蓝字关注我们 每年三月,有一项赛事将吸引全世界篮球迷的眼光,那就是全国大学篮球联赛(NCAA)的“疯狂三月”。 “疯狂三月”指的是NCAA男子甲组(Division 1)篮球锦标赛,赛程从3月中旬持…

生成模型的2022年——人工智能AIGC顶级论文回顾

2022年是生成模型奇幻发展的一年,Stable Diffusion🎨创造了超现实主义的艺术, ChatGPT 💬回答了生命意义的问题,Make a Video🎥从文本生成了栩栩如生的马儿,DreamFusion✨生成了不可思议的三维模…

大语言模型

前言: Open AI推出Chat GPT后,风靡全球。AI的强大表现让人折服,带来的商业效应已经逐渐扩散开来。随着人工智能越来越强,未来人们的生活受到影响也会越来越广泛。 继 OpenAI 推出 ChatGPT 后,微软迅速上线基于 GPT 模型…

OpenAI 利用基于“一致性”的图像生成器超越扩散模型

图像生成领域发展迅速。 尽管 Midjourney 和 Stable Diffusion 等流行工具使用的扩散模型可能看起来是我们所拥有的最好的,但下一个东西总是会出现——OpenAI 可能会用“一致性模型”来解决它,它已经可以完成简单的任务和 数量级比 DALL-E 之类的快。 该…

扩散模型和Transformer梦幻联动!替换U-Net,一举拿下新SOTA!

点击下方卡片,关注“CVer”公众号 AI/CV重磅干货,第一时间送达 点击进入—>扩散模型微信技术交流群 转载自:量子位 “U-Net已死,Transformer成为扩散模型新SOTA了!” 就在ChatGPT占尽AI圈风头时,纽约大学…

扩散模型diffusion model用于图像恢复任务详细原理 (去雨,去雾等皆可),附实现代码

文章目录 1. 去噪扩散概率模型2. 前向扩散3. 反向采样3. 图像条件扩散模型4. 可以考虑改进的点5. 实现代码 话不多说,先上代码: 扩散模型diffusion model用于图像恢复完整可运行代码,附详细实验操作流程 令外一篇简化超分扩散模型SR3来实现图…

0基础学习diffusion_model扩散模型【易理解的公式推导】Denoising Diffusion Probabilistic Models

0基础学习diffusion_model扩散模型【易理解的公式推导】 一、概述二、扩散过程(已知X0求Xt)三、逆扩散过程(已知Xt求Xt-1)1。算法流程图四、结论五、损失函数六、心得体会(优缺点分析)一、概述 DDPM论文链接: Jonathan Ho_Denoising Diffusion Probabilistic Models(NeurIPS…