andpods授权码订单号分享_微信OAuth2授权登录

前言

第三方登录是应用开发中的常用功能,通过第三方登录,我们可以更加容易使用户登录我们的应用或者网站。

很多网站都提供了第三方登录的功能,在他们的官网中,都提供了如何接入第三方登录的文档。但是,假如不同的网站文档差别极大,那么对于不了解第三方登录的新手来说,实现一个支持多网站第三方登录的功能可以说是极其痛苦。

实际上,大多数网站提供的第三方登录都遵循OAuth协议,虽然大多数网站的细节处理都是不一致的,甚至会基于OAuth协议进行扩展,但大体上其流程是一定的。

本篇文章以微信网页授权来介绍OAuth2.0中最经典最常用的一种授权模式:授权码模式

OAuth是什么?

OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用。

允许用户提供一个令牌而不是用户名和密码来访问他们存放在特定服务提供者的数据。每一个令牌授权一个特定的网站(例如,视频编辑网站)在特定的时段(例如,接下来的2小时内)内访问特定的资源(例如仅仅是某一相册中的视频)。这样,OAuth允许用户授权第三方网站访问他们存储在另外的服务提供者上的信息,而不需要分享他们的访问许可或他们数据的所有内容。

OAuth2.0官方文档为:https://tools.ietf.org/html/rfc6749

为什么是OAuth2.0呢?其实是有1和1.1版本的,只是因为1和1.1版本流程比较复杂,应用不是很广泛。

授权码模式流程

授权码模式(authorization code)是功能最完整、流程最严密的授权模式。它的特点就是通过客户端的后台服务器,与 "服务提供商" 的认证服务器进行互动。

整体大致过程如下:

8574ed9b74339cc12357737e5524da9b.png

OAuth2.0应用场景

我们这里主要模拟在微信公众号中使用OAuth2.0进行授权,获取用户的基本信息的过程。

第1步:引导用户进行授权:

当用户希望使用第三方登录进行登录时,第三方应用会通过类似下图的方式将用户引导至授权页面URL。

85b151904a76dae449f07cf91746fe47.png
登录方式

如:需要获取微信用户信息时,需要引导用户点击请求如下授权页面URL。

//open.weixin.qq.com/

请求参数详细介绍如下

参数必须说明
appid公众号的唯一标识
redirect_uri授权后重定向的回调链接地址, 请使用 urlEncode 对链接进行处理
response_type返回类型,只能填写code
scope应用授权作用域
snsapi_base (不弹出授权页面,直接跳转,只能获取用户openid)
snsapi_userinfo (弹出授权页面,可通过openid拿到昵称、性别、所在地等。并且即使在未关注的情况下,只要用户授权,也能获取其信息 )
state重定向后会带上state参数,开发者可以填写a-zA-Z0-9的参数值,最多128字节
#wechat_redirect无论直接打开还是做页面302重定向时候,必须带此参数

第2步:用户授权

当我们点击授权页面URL时,会出现以下授权页面

e3a463a938d7438186bbb710f1777ae3.png
微信授权页面

该页面由认证服务器提供,认证服务器会告诉用户该第三方在认证服务器中提交的相关信息,以及授权后第三方应用能够获取哪些资源。在微信中,最基础的认证可以访问用户的公共信息。

第3步:返回用户授权码(Code)

当用户同意授权后,认证服务器将生成一个用户授权码(Code),此时认证服务器如何将用户授权码(Code)传递给第三方应用呢?

当我们向认证服务器提交应用信息时,通常需要填写一个redirect_uri,在微信公众号的接口权限中

b81615bb741c5387f0bf35ddb636319a.png

点击修改(授权回调域名配置规范为全域名并且不带http)

3d3d625e510627267ffee73792bb4ea6.png
服务器中填写回调域名

在第1步中,当我们引导用户进入授权页面时,也会附带一个redirect_uri的信息。当认证服务器验证两个域名一致或在该域名的子域名下,便会通知浏览器跳转到redirect_uri,同时会在后面附加用户授权码(code)的相关信息。授权后访问的redirect_uri如下:

//xxx.com/oauth2?code=0217LHck2XfL3D0sbVfk2cFIck27LHcB&state=

注意:code作为换取access_token的票据,每次用户授权带上的code将不一样,code只能使用一次,5分钟未被使用自动过期。

第4步:换取网页授权access_token

要拿到认证服务器的授权,大致都需要以下几个信息:

  • client_id 标识第三方应用的id,由认证服务器(微信)在第三方应用提交时颁发给第三方应用

  • client_secret 第三方应用和认证服务器之间的安全凭证,由认证服务器(微信)在第三方应用提交时颁发的

  • code 第3步中认证服务器返回的授权码

  • state 由开发者给出的随机码,可选项

在微信中请求方法为

https:/

当认证服务器拿到上述中的所有信息,验证通过后,会将access_token返回给第三方应用。

注意:由于微信公众号的secret和获取到的access_token安全级别都非常高,必须只保存在服务器,不允许传给客户端。后续刷新access_token、通过access_token获取用户信息等步骤,也必须从服务器发起。

第5步:请求访问用户资源

拿到网页授权验证凭证(access_token)后,剩下的事情就很简单了,资源服务器会提供一系列关于用户资源的API,拿验证凭证(access_token)访问相应的API即可。

例如,在微信中,通过网页授权access_token、openid获取用户信息的请求方法:

//api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID

如果网页授权验证凭证(access_token)是正确的,此时资源服务器就会返回资源信息,此时整个OAuth2流程就结束了。

注:本文为Yolo原创,未经许可不得在任何平台转载,侵权必究。如需转载,可关注微信公众号:技术训练营,在后台留言,与作者联系,取得许可才能转载~

666d3cfc849f2e9b3e5273566d36ab76.png

微信扫一扫,发现更精彩。

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

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

相关文章

让8只数码管初始显示零,每隔大约1s加一显示,到数码管显示9后,再从一开始显示

让8只数码管初始显示零&#xff0c;每隔大约1s加一显示&#xff0c;到数码管显示9后&#xff0c;再从一开始显示 用延时函数实现加一显示 程序&#xff1a; #include <reg51.h> void delay(unsigned char n); int main(void) { unsigned char led[]{0xC0,0xF9,0xA4,0xB…

计算机项目经理专业,IT项目经理的对口专业

IT项目经理的对口专业IT项目经理是从事IT计算机相关的项目管理人员&#xff0c;IT项目经理需要具有一定的专业能力和管理能力&#xff0c;是一个较为高端的职位。有朋友问&#xff1a;IT项目经理的对口专业是什么?下面我们给大家介绍一下。如今&#xff0c;在互联网蓬勃发展的…

让8只数码管从左往右显示1、2、3、4、、、8

编写实验学习数码管动态显示&#xff0c;让8只数码管从左往右显示1,2&#xff0c;3,4&#xff0c;&#xff0c;&#xff0c;8 程序&#xff1a; #include <reg51.h> unsigned char led[]{0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80};//0-9的字型码 unsigned char segment[…

miracast投屏软件下载_手机画面如何投屏到电视?

投屏方法详解&#xff0c;拆解步骤&#xff0c;视频演示&#xff0c;讲到你会用为止&#xff01;安卓手机Miracast镜像安卓手机Miracast镜像可谓刚需&#xff0c;这种镜像方式的一大优点就是手机端不用再另装其他软件&#xff0c;电视端有“爱投屏”即可流畅使用。步骤如下&…

iec61131 3 html5,IEC61131-3{ed3.0}标准资料.doc

IEC61131-3{ed3.0}标准资料IEC 61131-3?Edition 3.0 2013-02INTERNATIONALSTANDARDNORMEINTERNATIONALEProgrammable controllers –Part 3: Programming languagesAutomates programmables –Partie 3: Langages de programmationTHIS PUBLICATION IS COPYRIGHT PROTECTEDCop…

外部中断实验 编写程序学习外部中断的电平触发方式。无中断时发光让发光二极管从左到右依次点亮,有外部中断请求时,4位数码管从0000开始加1显示(加到9999后复位为0000),同时蜂鸣器报警。

编写程序学习外部中断的电平触发方式。无中断时发光让发光二极管从左到右依次点亮&#xff0c;有外部中断请求时&#xff0c;4位数码管从0000开始加1显示(加到9999后复位为0000)&#xff0c;同时蜂鸣器报警。 程序&#xff1a; #include<reg51.h> #define uchar unsigne…

flash一个按钮控制动画_PLC三组灯用一个按钮控制

今天作一个PLC小练习用一个按钮控制三组或三个灯,以达到控制灯的亮度,由PLC组成一个控制器,每按一次按钮增加一组灯亮,三组灯全亮后,每按一次按钮,灭一组灯(为了使每组灯亮的时间尽量相等,要求先亮的灯先灭),如果按下按钮的时间超过2S,则灯全灭.模拟练习设M600.0是按钮1M800.0是…

51单片机外部中断实验 设置中断优先级寄存器,当有外部中断0请求中断时,中断程序执行发光二极管程序,在此过程中,外部中断1也有中断请求,外部中断0的中断程序将被中断去执行外部中断1的中断程序(数码管

设置中断优先级寄存器&#xff0c;当有外部中断0请求中断时&#xff0c;中断程序执行发光二极管程序&#xff0c;在此过程中&#xff0c;外部中断1也有中断请求&#xff0c;外部中断0的中断程序将被中断去执行外部中断1的中断程序&#xff08;数码管加1显示程序&#xff09;。 …

下载 6g 概念及愿景白皮书_6G,到底有多6?6G概念及愿景白皮书正式发布!

近日赛迪智库正式发布《6G概念及愿景白皮书》白皮书从6G愿景、6G应用场景6G网络性能指标、6G潜在关键技术国际组织和各国6G研究进展等方面展开讨论并提出加快我国推进6G研发的相关建议以为业界在面向2030网络及6G研究方面提供重要参考话又说回来6G究竟是个啥6G&#xff0c;即第…

html如何创建关键帧动画旋转,[教程] 用 CSS3 Animations(动画) 和 Keyframes(关键帧) 创建简单的网页动画 – CSS3 实现弹跳球动画...

通过这个有趣的教程学习 CSS Animations(动画) 和 Keyframes(关键帧)。我们要做什么&#xff1f;下面是最终代码&#xff0c;也就是我们将要最终实现的演示&#xff1a;基础准备对于这个实现&#xff0c;我们需要一个简单的 div &#xff0c;并且样式类名为 ball &#xff1a;我…

定时器中断实验 编写程序使定时器0或者定时器1工作在方式1,定时50ms触发蜂鸣器。

编写程序使定时器0或者定时器1工作在方式1&#xff0c;定时50ms触发蜂鸣器。 程序&#xff1a; #include<reg51.h> sbit fmP2^3; unsigned char cnt; int main(void) { TMOD0x01; TH0(65536-46083)/256; TL0(65536-46083)%256; cnt0; TR01; EA1; ET01; while(1); } void …

python绘制如下图形、小三角形边长20_python二级操作题与分析(7)

1.基本操作题 (1) 从键盘输入 3 个数作为三角形的边长&#xff0c;在屏幕上显示输出由这 3 个边长构成三角形的面积&#xff08;保留 2 位小数&#xff09;。 请参照代码模板&#xff0c;完善代码。 输入输出示例 输入输出 示例 1 3,3,3 3.90 习题讲解 a,b,c eval(input()) p …

NPM 的使用技巧:简化 JavaScript 开发和依赖管理

前言 NPM&#xff08;Node Package Manager&#xff09;是 JavaScript 生态系统中最流行的包管理工具之一。本文将介绍一些有用的 NPM 使用技巧&#xff0c;帮助开发者更好地利用 NPM 管理项目依赖、执行脚本、发布自己的包以及解决常见问题。 1. 初始化项目 使用 NPM 初始化…

定时器中断实验 编写程序使定时器0或者定时器1工作在方式1,定时500ms使两位数码管从00、01、02……98、99每间隔500ms加1显示。

编写程序使定时器0或者定时器1工作在方式1&#xff0c;定时500ms使两位数码管从00、01、02……98、99每间隔500ms加1显示。 程序&#xff1a; #include <reg51.h> #define uint unsigned int #define uchar unsigned char sbit a P1^0; sbit b P1^1; uchar code tu…

iOS打开沙盒html,iOS WKWebView加载本地/沙盒HTML及css、images

注意这里加载的是本地的不是沙盒里的,加载沙盒的方法在最下面。先上代码&#xff1a;NSString *path [[NSBundle mainBundle] pathForResource:“local.html" ofType:nil];[_wkWebView loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:path]]];注意&am…

定时器中断实验 编写程序使定时器0或者定时器1工作在方式2,自动重装载模式,定时500ms使两位数码管从00、01、02……98、99每间隔500ms加1显示。

编写程序使定时器0或者定时器1工作在方式2&#xff0c;自动重装载模式&#xff0c;定时500ms使两位数码管从00、01、02……98、99每间隔500ms加1显示。 程序&#xff1a; #include <reg51.h> #define uchar unsigned char uchar led[]{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x…

用python做频数分析_使用Python进行描述性统计

2 使用NumPy和SciPy进行数值分析 2.1 基本概念1 from numpy import array 2 from numpy.random import normal, randint 3 #使用List来创造一组数据 4 data [1, 2, 3] 5 #使用ndarray来创造一组数据 6 data array([1, 2, 3]) 7 #创造一组服从正态分布的定量数据 8 data norm…

深圳计算机专业收入,深圳哪个行业收入最高?哪些行业最抢手?这份报告告诉你!...

原标题&#xff1a;深圳哪个行业收入最高&#xff1f;哪些行业最抢手&#xff1f;这份报告告诉你&#xff01;原标题&#xff1a;深圳哪个行业收入最高&#xff1f;哪些行业最抢手&#xff1f;这份报告告诉你&#xff01;南方网2019年7月5日讯 日前&#xff0c;智联招聘发布《2…

串行口实验 编写程序利用串口调试助手通过串口给实验板发送数据(数据范围0x00-0xfe),单片机将接受到的数据加1后再发送给PC机。

编写程序利用串口调试助手通过串口给实验板发送数据&#xff08;数据范围0x00-0xfe&#xff09;&#xff0c;单片机将接受到的数据加1后再发送给PC机。 程序&#xff1a; #include<reg51.h> #define uchar unsigned char #define uint unsigned int uchar temp; int main…

中学生 学python_中小学生为什么要学Python编程

中小学生为什么要学Python编程&#xff1f;未来是人工智能的时代&#xff0c;有理由相信Python将发挥更大的作用。教育部下发的《2018年度普通高等学校本科专业备案和审批结果的通知》显示&#xff0c;新增备案本科专业79个、新增审批本科专业19个。 呼声极高的人工智能专业被列…