Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >从微信网页授权到OAuth 2.0

从微信网页授权到OAuth 2.0

作者头像
娜姐
发布于 2020-09-22 02:30:02
发布于 2020-09-22 02:30:02
2K00
代码可运行
举报
文章被收录于专栏:娜姐聊前端娜姐聊前端
运行总次数:0
代码可运行

相信你使用某些APP需要做登录操作,那么,有可能会出现“微信登录”的按钮。点击该按钮,会跳转到如下页面:

w-login.jpeg

当然,我们的前提是通过H5页面登录。那么,此时只需要“确认登录”,那么,返回应用后该应用会获得你的部分微信账户信息,比如头像,用户名等。然后,在应用APP中,你可以看到自己的微信头像。

整个流程,就是一个OAuth 2.0登录。下面,我们从微信文档开始,开启OAuth 2.0之路。

1. 微信网页授权

文档链接:https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Wechat_webpage_authorization.html

关于网页授权回调域名的说明 ... 2、授权回调域名配置规范为全域名,比如需要网页授权的域名为:www.qq.com,配置以后此域名下面的页面http://www.qq.com/music.htmlhttp://www.qq.com/login.html 都可以进行OAuth2.0鉴权。但http://pay.qq.comhttp://music.qq.comhttp://qq.com 无法进行OAuth2.0鉴权

可以肯定,微信网页授权采用的就是OAuth 2.0标准。

第一步:三方应用的H5页面向微信发起授权申请
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect

wechat.jpg

  • appid就是三方应用在微信开发平台/公众号 注册的应用ID。只有是授权提供方的注册用户,三方应用才有可能使用授权能力。
  • redirect_uri指定了微信授权成功后,需要重定向到哪里
第二步:授权成功,微信重定向到 redirect_uri,并在URL上携带code

H5通过接口将code传给服务端,最后,服务端通过code换取网页授权access_token,完成登录操作。

大多数三方应用,都有自己的用户系统。那么,微信授权之后,最终映射到应用的用户系统,完成sessiontoken的生成。

上面两个步骤的代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
componentDidMount() {
        const query = parseUrlSearch();
        const { code } = query;
        this.code = code;
        if (!query) {
            return;
        }
        if (isWechat()) {
            this.componentDidMountForWechat(code);
        }
    }

componentDidMountForWechat(code) {
        if (code) {
            // 向服务端发起请求:先登陆,更新cookie,再拉取列表信息
            wechatLogin(code, 'login,register,login').then(response => {
                const { errorCode, data } = response.data;
                if (errorCode === 0) {
                    setCookies('token', data.token);
                    setCookies('sessionId', data.session);
                }
               ...
            })
        }
        else {
            const appid = 'xxxxxxxxx',
                redirect_uri = encodeURIComponent(window.kk),
                scope = 'snsapi_userinfo',
                state = Math.round(Math.random() * 1000000000)
            window.kk = `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${appid}&redirect_uri=${redirect_uri}&response_type=code&scope=${scope}&state=${state}#wechat_redirect`;
        }
    }

2. 理解OAuth 2.0

有了微信网页授权的经验,那么,就不难理解OAuth 2.0了。

OAuth是一个关于授权(authorization)的开放网络标准 OAuth在"客户端"与"服务提供商"之间,设置了一个授权层(authorization layer)。 "客户端"不能直接登录"服务提供商",只能登录授权层,以此将用户与客户端区分开来。 "客户端"登录授权层所用的令牌(token),与用户的密码不同。用户可以在登录的时候,指定授权层令牌的权限范围和有效期。 "客户端"登录授权层以后,"服务提供商"根据令牌的权限范围和有效期,向"客户端"开放用户储存的资料。

我们来看看OAuth 2.0运行流程:

oauth.jpg

  • 资源拥有者(Resource Owner) - 用户
  • 客户端(Client) - 三方应用
  • 资源服务器(Resource Server) - 存放用户资源和信息
  • 授权服务器(Authorization Server) - 给三方颁发授权令牌(access token)

一般,资源服务器和授权服务器是同一个服务

在上面讲到的微信网页授权登录的例子里,"客户端"是三方应用,"服务提供商"就是微信。

再看看它的授权流程:

oauth2.jpg

  1. 用户打开应用程序,应用程序要求用户给予授权。
  2. 用户同意给予应用程序授权。
  3. 应用程序使用上一步获得的授权,向授权服务器申请令牌。
  4. 授权服务器对应用程序进行认证以后,确认无误,同意发放令牌。
  5. 应用程序使用令牌,向资源服务器申请获取资源。
  6. 资源服务器确认令牌无误,同意向应用程序开放资源。

是不是和微信网页授权流程一样呢?

3. OAuth 2.0授权方式

OAuth 2.0定义了四种授权方式。

  • 授权码模式(authorization code)
  • 简化模式(implicit)
  • 密码模式(resource owner password credentials)
  • 客户端模式(client credentials)

最常用的是授权码模式(微信授权登录采用这种模式),这里不再展开,可以参考老阮的文章:《OAuth 2.0 的四种方式》

4. OAuth 2.0和JWT(Json web token)

两者完全没有关系!这两个是两个完全不同的东西,根本没有可比性!

JWT是一种认证协议 JWT提供了一种用于发布接入令牌(Access Token),并对发布的签名接入令牌进行验证的方法。 令牌(Token)本身包含了一系列声明,应用程序可以根据这些声明限制用户对资源的访问。

在用户鉴权时,可以用JWT做Token认证,仅此而已。

小结

现在越来越多的应用都支持了三方登录,免除用户注册。只不过,授权登录成功后,大多应用强行用户填写手机号,这是为了补充用户信息。因为,授权服务一般不会提供用户手机号这种个人隐私信息。

那么,OAuth 2.0和单独登录(SSO)又有什么关系呢?卖个关子,后续聊。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Spring Boot + OAuth2.0 实现微信扫码登录,这才叫优雅!!
点击关注公众号,Java干货及时送达 微信开放平台:微信扫码登录功能 官方文档:https://developers.weixin.qq.com/doc/oplatform/Website_App/WeChat_Login/Wechat_Login.html 1. 授权流程说明 微信OAuth2.0授权登录让微信用户使用微信身份安全登录第三方应用或网站,在微信用户授权登录已接入微信OAuth2.0的第三方应用后,第三方可以获取到用户的接口调用凭证(access_token),通过access_token可
Java技术栈
2022/04/21
5.7K0
Spring Boot + OAuth2.0 实现微信扫码登录,这才叫优雅!!
OAuth 2.0 极简教程 (The OAuth 2.0 Authorization Framework)
OAuth(开放授权)是一个开放标准,允许用户授权第三方移动应用访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方移动应用或分享他们数据的所有内容,OAuth2.0 不兼容OAuth 1.0 。
一个会写诗的程序员
2020/10/29
3.2K0
OAuth 2.0 极简教程 (The OAuth 2.0 Authorization Framework)
OAuth2.0理解和用法
现在网络的资料到处都是,很容易搜索到自己想要的答案。但答案通常只能解决自己一部分的问题。如果自己想要有一套自己的解决方案,还得重新撸一遍靠谱。
Ryan-Miao
2021/04/19
1.3K0
OAuth2.0理解和用法
第三方登录:微信扫码登录(OAuth2.0
  OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用。
朝雨忆轻尘
2019/06/18
58.5K1
【微信生态圈】微信体系中的access_token有哪些?
access_token是公众号/小程序的全局唯一接口调用凭据,公众号/小程序调用各接口时都需使用access_token。开发者需要进行妥善保存。 access_token的存储至少要保留512个字符空间。 access_token的有效期目前为2个小时,需定时刷新。
烟雨平生
2023/09/22
8460
【微信生态圈】微信体系中的access_token有哪些?
理解OAuth 2.0
Oauth是一个关于授权(authentication)的开发网络标准,允许用户授权第三方应用访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方应用。Oauth2.0是Oauth协议的延续版本,但不向后兼容Oauth1.0,即完全废止了Oauth1.0。
用户1212940
2022/05/11
8020
理解OAuth 2.0
Spring Security实战干货:集成微信公众号OAuth2.0授权
请注意,一定是微信公众号服务号,只有服务号才提供这样的能力。像胖哥的这样公众号虽然也是认证过的公众号,但是只能发发文章并不具备提供服务的能力。但是微信公众平台提供了沙盒功能来模拟服务号,可以降低开发难度,你可以到微信公众号测试账号页面申请,申请成功后别忘了关注测试公众号。
码农小胖哥
2021/09/09
1.7K0
可能是第二好的 Spring OAuth 2.0 文章,艿艿端午在家写了 3 天~
在《芋道 Spring Boot 安全框架 Spring Security 入门》文章中,艿艿分享了如何使用 Spring Security 实现认证与授权的功能,获得广大女粉丝的好评。
芋道源码
2020/07/02
2.1K0
可能是第二好的 Spring OAuth 2.0 文章,艿艿端午在家写了 3 天~
微信网页授权
用户在微信客户端中访问第三方网页,公众号可以通过微信网页授权机制,来获取用户基本信息,进而实现业务逻辑。
超超不会飞
2020/09/18
2.6K0
微信网页授权
OAuth2.0认证解析
OAuth是一个关于授权(authorization)的开放网络标准,在全世界得到广泛应用,目前的版本是2.0版。
FB客服
2020/11/16
4.5K0
OAuth2.0认证解析
OAuth 2.0 授权认证详解
点击上方“芋道源码”,选择“设为星标” 管她前浪,还是后浪? 能浪的浪,才是好浪! 每天 10:33 更新文章,每天掉亿点点头发... 源码精品专栏 原创 | Java 2021 超神之路,很肝~ 中文详细注释的开源项目 RPC 框架 Dubbo 源码解析 网络应用框架 Netty 源码解析 消息中间件 RocketMQ 源码解析 数据库中间件 Sharding-JDBC 和 MyCAT 源码解析 作业调度中间件 Elastic-Job 源码解析 分布式事务中间件 TCC-Transaction
芋道源码
2022/06/20
1.9K0
OAuth 2.0 授权认证详解
理解OAuth2.0认证与客户端授权码模式详解
OAuth 协议为用户资源的授权提供了一个安全又简易的标准。与以往的授权方式不同之处是 OAuth的授权不会使第三方触及到用户的帐号信息(如用户名与密码),即第三方无需使用用户的用户名与密码就可以申请获得该用户资源的授权,因此 OAuth是安全的。OAuth 是 Open Authorization 的简写
BUG弄潮儿
2021/04/12
6K0
微信网页授权
在这里也不给大家做过多的介绍了,因为微信的开发手册已经写得很仔细了,关于一些注释代码里面已经有了,这里为了大家方便查看,我就直接copy微信手册的文档说明,便于大家阅读。
兔云小新LM
2020/05/19
4K0
OAuth2.0 认证
密码模式(Resource owner password credentials)流程
谢公子
2022/01/20
1.6K0
OAuth2.0 认证
网站获取微信授权登录功能
首先需要弄明白的是你是在微信服务号里面开发的网站还是独立的网站应用,独立的网站获取微信登录功能需要满足以下条件:
johnhuster的分享
2022/03/28
3K0
网站获取微信授权登录功能
微信公众号-网页授权
在微信公众号请求用户网页授权之前,开发者需要先到公众平台官网中的“开发 - 接口权限 - 网页服务 - 网页帐号 - 网页授权获取用户基本信息”的配置选项中,修改授权回调域名。请注意,这里填写的是域名(是一个字符串),而不是URL,因此请勿加 http:// 等协议头
星哥玩云
2022/09/14
4K0
微信公众号-网页授权
微信公众号网页授权登录
本节讲解一下微信公众号开发之-微信网页授权,此开发主要是针对于在微信公众号内打开链接,请求获取用户登录信息。在此之前开发者需要做token验证、有网页授权登录权限。
申霖
2019/12/27
4.8K0
微信公众号网页授权登录
微信公众号网页授权
下面是微信官方给出的授权地址,以下 url 中大写的参数值代表的动态参数,需要开发者去传参,小写的参数值代表固定值,无需动态修改
很酷的站长
2023/01/03
4.1K0
微信公众号网页授权
SpringBoot+uniapp实现网页授权获取用户基本信息
起因于本狗上一个项目本打算采用微信公众号网页授权登录做用户鉴权,但最终因公众号是未认证的订阅号,无权限获取用户信息,所以改变思路,采用登录注册方式实现用户区分。但在开发中,学习了微信网页授权登录流程,特此分享,带你手把手操作,让我们一起捋清授权的逻辑。
JavaDog程序狗
2024/10/08
2320
SpringBoot+uniapp实现网页授权获取用户基本信息
使用微信测试账号对网页进行授权
如果用户在微信客户端中访问第三方网页,公众号可以通过微信网页授权机制,来获取用户基本信息,进而实现业务逻辑。我们在进行公众号网页开发的时候,想要获取用户的基本信息,首先得获取到access_token,从access_token里我们要拿出用户的openid来作为用户在我们系统中的唯一标识,以及通过openid可以保证该用户的只能访问到与其openid相对应的数据,防止越权漏洞。因此,我们需要对网页进行授权,否则是无法在获取到用户的openid的。
端碗吹水
2020/09/23
4.3K0
使用微信测试账号对网页进行授权
相关推荐
Spring Boot + OAuth2.0 实现微信扫码登录,这才叫优雅!!
更多 >
LV.1
这个人很懒,什么都没有留下~
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验