谷粒学院(十六)OAuth2 | 微信扫码登录 | QQ扫码登录(一)

简介: 谷粒学院(十六)OAuth2 | 微信扫码登录 | QQ扫码登录(一)

一、OAuth2解决什么问题


1、OAuth2提出的背景


照片拥有者想要在云冲印服务上打印照片,云冲印服务需要访问云存储服务上的资源



ef8ca6df536bbdd4f958eb9f92483ccf.jpg


2、图例


资源拥有者:照片拥有者

客户应用:云冲印

受保护的资源:照片



93b0b8a583bc4fae22d70356303ddebe.jpg

3、方式一:用户名密码复制


适用于同一公司内部的多个系统,不适用于不受信的第三方应用


699414a45809bd3d4f90f500168a18ee.jpg


4、方式二:通用开发者key


适用于合作商或者授信的不同业务部门之间


d7d470effea8c93726612f9ff639024d.jpg

5、方式三:办法令牌


接近OAuth2方式,需要考虑如何管理令牌、颁发令牌、吊销令牌,需要统一的协议,因此就有了OAuth2协议

dc215be39b18064e1916539d39c89b9f.jpg

二、现代微服务安全


除了开放系统授权,OAuth2还可以应用于现代微服务安全


1、传统单块应用的安全


d321c1cdcd37c0b5cce752a345f5e40c.jpg

2、现代微服务安全


现代微服务中系统微服务化以及应用的形态和设备类型增多,不能用传统的登录方式

核心的技术不是用户名和密码,而是token,由AuthServer颁发token,用户使用token进行登录


f566dab5f455bc77ac95a2a79ca3038c.jpg

3、典型的OAuth2应用

d5eeb68a2c90869b9584e6c2ca5ba054.jpg


4、OAuth2总结

aaf53e7dd9117acd6c9332ce1b121fb3.jpg

三、什么是OAuth2


1、OAuth2正式定义



683ea6a8341d8c39655e16d5ccb42d7b.jpg

2、令牌的核心



0491c132b78918aeab40a18f1e69b46f.jpg


3、OAuth2的历史


26ac51582b703dd5f41c32937ac585b4.png


4、OAuth2的优势


8496ce8e8202458dd9ff8ef00cbf8ecf.jpg


5、OAuth2的不足


a66f5c75d4b28872d37085382b4abff5.jpg

6、Auth2涉及的角色



998b289bd069c0c5b8b7a65c42627155.jpg

7、OAuth2术语

7c584b3cbc9df6560f1c058b25eb755a.png


c72d6501383f17e2b35dbe64b0f32968.png

8、OAuth2令牌的类型



image.jpeg



9、OAuth2的误解


image.jpeg



OAuth 2.0 的四种方式(推荐篇):

http://www.ruanyifeng.com/blog/2019/04/oauth-grant-types.html


四、微信扫描登录


1、准备工作


https://open.weixin.qq.com


1、注册

2、邮箱激活

3、完善开发者资料

4、开发者资质认证


准备营业执照,1-2个工作日审批、300元


5、创建网站应用


提交审核,7个工作日审批


6、熟悉微信登录流程


参考文档:https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419316505&token=e547653f995d8f402704d5cb2945177dc8aa4e7e&lang=zh_CN


获取access_token时序图


12e63199e7e4ec721a8e408cfd33590b.png



2、后端开发


1、添加配置


application.properties添加相关配置信息

注意:服务端口要改成8160,因为谷粒学院的业务服务器的端口改成了8160… 然后记得修改nginx配置.


# 服务端口
server.port=8160
# 微信开放平台 appid
wx.open.app_id=wxed9954c01bb89b47
# 微信开放平台 appsecret
wx.open.app_secret=a7482517235173ddb4083788de60b90e
# 微信开放平台 重定向url
wx.open.redirect_url=http://localhost:8160/api/ucenter/wx/callback

2、创建常量类


创建util包,创建ConstantWxUtils.java常量类

@Component
//@PropertySource("classpath:application.properties")
public class ConstantWxUtils implements InitializingBean {
    @Value("${wx.open.app_id}")
    private String appId;
    @Value("${wx.open.app_secret}")
    private String appSecret;
    @Value("${wx.open.redirect_url}")
    private String redirectUrl;
    public static String WX_OPEN_APP_ID;
    public static String WX_OPEN_APP_SECRET;
    public static String WX_OPEN_REDIRECT_URL;
    @Override
    public void afterPropertiesSet() throws Exception {
        WX_OPEN_APP_ID = appId;
        WX_OPEN_APP_SECRET = appSecret;
        WX_OPEN_REDIRECT_URL = redirectUrl;
    }
}

3、创建controller

service_ucenter微服务中创建WxApiController类

/**
 * @author lxy
 * @version 1.0
 * @Description
 * @date 2022/3/10 22:22
 */
@CrossOrigin
@Controller
@RequestMapping("/api/ucenter/wx")
public class WxApiController {
    @Autowired
    private UcenterMemberService memberService;
    //1.生成微信扫描二维码
    @GetMapping("login")
    public String getWxCode(HttpSession session) {
        //固定地址,后面直接拼接参数
        // String url = "https://open.weixin.qq.com/" +
        //              "connect/qrconnect?appid="+ ConstantWxUtils.WX_OPEN_APP_ID+"&response_type=code";
        //微信开放平台授权baseUrl %s相当于?代表占位符
        String baseUrl = "https://open.weixin.qq.com/connect/qrconnect" +
                "?appid=%s" +
                "&redirect_uri=%s" +
                "&response_type=code" +
                "&scope=snsapi_login" +
                "&state=%s" +
                "#wechat_redirect";
        //对redirect_rul进行URLEncode编码
        String redirectUrl = ConstantWxUtils.WX_OPEN_REDIRECT_URL;
        try {
            redirectUrl = URLEncoder.encode(redirectUrl, "utf-8");
        } catch (Exception e) {
            e.printStackTrace();
        }
        String url = String.format(
                baseUrl,
                ConstantWxUtils.WX_OPEN_APP_ID,
                redirectUrl,
                "atguigu"
        );
        return "redirect:" + url;
    }
}

授权url参数说明


参数 是否必须 说明
appid 应用唯一标识
redirect_uri 请使用urlEncode对链接进行处理
response_type 填code
scope 应用授权作用域,拥有多个作用域用逗号(,)分隔,网页应用目前仅填写snsapi_login即
state 用于保持请求和回调的状态,授权请求后原样带回给第三方。该参数可用于防止csrf攻击(跨站请求伪造攻击),建议第三方带上该参数,可设置为简单的随机数加session进行校验


相关文章
|
数据安全/隐私保护
常用的表单校验规则——邮箱/QQ/身份证号码/微信/电话/数字字母/整数/文本/密码等
常用的表单校验规则——邮箱/QQ/身份证号码/微信/电话/数字字母/整数/文本/密码等
426 0
|
2月前
|
Java 数据安全/隐私保护 计算机视觉
手机虚拟视频替换摄像头,QQ微信虚拟视频插件,jar代码分享
这段代码演示了如何使用JavaCV捕获视频流、处理帧数据并输出到虚拟摄像头设备。它需要JavaCV和OpenCV库支持
|
3月前
|
数据安全/隐私保护
陌陌头像留V的最好方法,陌陌最新留QQ号技巧,陌陌动态最聪明的留微信
本资料分享社交平台隐秘留联系方式的方法,包含微信头像艺术化处理、二维码变形术,以及QQ号谐音替换、图片分割等技巧。
|
7月前
|
人工智能 安全 机器人
LangBot:无缝集成到QQ、微信等消息平台的AI聊天机器人平台
LangBot 是一个开源的多模态即时聊天机器人平台,支持多种即时通信平台和大语言模型,具备多模态交互、插件扩展和Web管理面板等功能。
1441 14
LangBot:无缝集成到QQ、微信等消息平台的AI聊天机器人平台
|
7月前
|
人工智能 开发框架 机器人
AstrBot:轻松将大模型接入QQ、微信等消息平台,打造多功能AI聊天机器人的开发框架,附详细教程
AstrBot 是一个开源的多平台聊天机器人及开发框架,支持多种大语言模型和消息平台,具备多轮对话、语音转文字等功能。
4400 15
AstrBot:轻松将大模型接入QQ、微信等消息平台,打造多功能AI聊天机器人的开发框架,附详细教程
|
9月前
|
监控 算法 测试技术
即时通讯技术文集(第45期):微信、QQ技术精华合集(Part2) [共14篇]
为了更好地分类阅读 52im.net 总计1000多篇精编文章,我将在每周三推送新的一期技术文集,本次是第45 期。
134 3
|
10月前
|
存储 编解码 监控
即时通讯技术文集(第44期):微信、QQ技术精华合集(Part1) [共14篇]
为了更好地分类阅读 52im.net 总计1000多篇精编文章,我将在每周三推送新的一期技术文集,本次是第44 期。
111 2
|
JSON 安全 Java
Spring Security 6.x 微信公众平台OAuth2授权实战
上一篇介绍了OAuth2协议的基本原理,以及Spring Security框架中自带的OAuth2客户端GitHub的实现细节,本篇以微信公众号网页授权登录为目的,介绍如何在原框架基础上定制开发OAuth2客户端。
586 4
Spring Security 6.x 微信公众平台OAuth2授权实战
电脑上控制所有软件,比如说微信自动发消息,QQ
电脑上控制所有软件,比如说微信自动发消息,QQ

热门文章

最新文章