谷粒教育--微信登录(9)

本文详细介绍了OAuth2授权框架的基本概念、流程,并重点讲解了微信登录的准备工作、扫码登录流程,包括请求code、获取accessToken、获取userMap以及如何处理用户数据。同时,文章还提到了JWT工具在生成和验证token中的应用。
摘要由CSDN通过智能技术生成

OAuth2

概述

OAuth(开放授权)是一个开放标准,允许用户授权第三方移动应用访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方移动应用或分享他们数据的所有内容,OAuth2.0是OAuth协议的延续版本,但不向后兼容OAuth 1.0即完全废止了OAuth1.0。
它是基于令牌token的授权,在无需暴露用户密码的情况下,使应用能够获取对用户数据的有限访问。

相关术语

在这里插入图片描述

流程

在这里插入图片描述

  1. 第三方客户应用向资源持有者请求获取资源
  2. 资源持有者授权给第三方应用一个许可
  3. 第三方应用将该许可给予认证服务器(授权)进行认证,如果认证成功,返回一个Access Token访问令牌
  4. 第三方应用使用该access token到资源服务器处获取该access token对应的资源(也就是第一步中资源持有者自身的资源)

OAuth令牌类型

在这里插入图片描述

微信登录

准备工作

注册连接

  1. 注册
  2. 完善开发者资料
  3. 开发者认证资质
  4. 创建网站应用

微信登录流程

参考文档

请求code二维码

第一步:请求code二维码
1、 在基础地址上拼接参数
注:传入的 redirectUrl要先进行utf-8编码
2、拼接好参数后,重定向到该低智商
return “redirect:”+url;

//    生成微信登录扫描的二维码
//    只需要根据你的注册信息拼接一个url
//    其中redirectUrl在拼接之前用utf-8进行编码
    @GetMapping("/createCode")
    public String getWxCode() {
   
//        基础地址后面拼接参数
        // 微信开放平台授权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";
//         String.format设置%s中的值
//        请使用urlEncode对链接进行处理
      String redirectUrl=  ConstantProperties.WX_OPEN_REDIRECT_URL;
        String encode = null;
//        传入的 redirectUrl要先进行utf-8编码
        try {
   
            encode = URLEncoder.encode(redirectUrl, "utf-8");
        } catch (UnsupportedEncodingException e) {
   
            e.printStackTrace();
        }

        String url = String.format(
                baseUrl,
                ConstantProperties.WX_OPEN_APP_ID,
                encode,
                "auguigu"
        );
//        请求微信的地址,重定向到请求的微信地址中,
        return "redirect:"+url;

//        RestController 用redirect没有重定向的原因
//        RestController 用来做数据返回 ,我们现在不需要返回数据
    }

获取accessToken

第二步:通过code去获取accessToken
在开发者中配置后 * 微信扫码登录之后会自动跳转到8150端口

  http://localhost:8150/api/ucenter/wx/callback?code=081b6ZAc02Vubz1G2zCc0XI5Bc0b6ZAZ&state=auguigu

我们需要处理这个地址,回调即回调接口地址和域名跳转地址一样即可进行回调。 通过获取code和state拼接获取accestoken地址
在callback中请求这个拼接好的地址,得到地址返回的token

  1. 利用HTTP工具类HttpClientUtils发送请求
  2. 请求得到的结果result为Json数据,需将json转换成Hashmap<k,v>键值对的形式
    这里用到com.google.gson.Gson类用于解析Json格式
  3. 取出结果集result中的access_tokenopenid
 /*
    * 微信扫码登录之后会自动跳转到8150端口
    * http://localhost:8150/api/ucenter/wx/callback?code=081b6ZAc02Vubz1G2zCc0XI5Bc0b6ZAZ&state=auguigu
    * 我们需要处理这个地址
    * 在这个域名地址下写程序 直接请求这个地址,
    * 把本地服务端口改成8150
    * 回调接口地址和域名跳转地址写成一样
    *
    * 在callback中获取扫码人信息
    * */
    @GetMapping("/callback")
    public String callback(@RequestParam("code") String code,@RequestParam("state"
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值