首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
01 | 初步介绍微信小程序
02 | 还有哪些其它公司的小程序产品
03 | 小程序的特点及开发能力
04 | 新的一年,微信小程序开放了哪些新功能?
05 | 小程序运行机制简介:从零构建一个Web App需要做哪些事情?
06 | 开发环境配置:创建你的第一个小程序项目
07 | icon组件:关于图标的4个实现方案
08 | progress组件:如何自定义实现一个环形进度条?
09 | rich-text组件:如何单击预览rich-text中的图片并保存?
10 | view容器组件及Flex布局(一):学习容器组件view及其重要属性
11 | view容器组件及Flex布局(二):介绍flex布局中常用的样式及样式值
12 | 可移动容器及可移动区域(一):学习使用movable-view与movable-area组件
13 | 可移动容器及可移动区域(二):如何实现侧滑删除功能
14 | scroll-view介绍:在小程序中如何实现滚动锚定?
15 | scroll-view介绍:如果渲染一个滚动的长列表?
16 | 滚动选择器(一):学习使用选择器组件
17 | 滚动选择器(二):使用两种方式自定义实现省、市、区三级联动的选择器
18 | 滑动选择器表单组件:如何基于wxs自定义一个竖向的slider?
19 | 页面链接组件:如何自定义一个导航栏?
20 | image媒体组件(上):如何实现图片的懒加载?
21 | image媒体组件(下):开发中经常遇到的问题?
22 | 如何实现直播间功能?(一):了解live-pusher、live-player组件的主要属性及使用限制
23 | 如何实现直播间功能?(二):如何开启、使用腾讯云的云直播功能
24 | 如何实现直播间功能?(三):安装与使用ffmepg,及使用ffmpeg进行推拉流验证
25 | 如何实现直播间功能?(四):使用live-pusher、live-player组件在小程序中实现直播功能
26 | 如何实现直播间功能?(五):同层渲染
27 | 如何实现直播间功能?(六):live-pusher、live-player组件在开发中的常见问题
28 | web-view(一):了解session、cookie等相关基本概念
29 | web-view(二):了解常见的四种鉴权方式
30 | web-view(三):如何使用koa框架,及如何进行热加载?
31 | web-view(四):如何在服务器端实现cookie与sesson的生成?
32 | web-view(五):如何将session存储到服务器端,及如何实现token验证?
33 | web-view(六):基于koa中间件,实现微信一键登录的后端接口
34 | web-view(七):实现微信用户一键登录
35 | web-view(八):了解正确的微信登录姿势
36 | web-view(九):web-view组件在开发的常见问题讲解
37 | WebGL介绍(一):了解WebGL相关的基础概念
38 | WebGL介绍(二):如何在小程序中取到WebGL上下文环境对象
39 | WebGL介绍(三):了解WebGL的世界坐标系
40 | WebGL介绍(四):重新认识右手坐标系及如何编写顶点着色器代码
41 | WebGL介绍(五):学习片断着色器编写,了解变量修饰变型uniform与attribute
42 | WebGL介绍(六):了解在WebGL中裁剪空间是如何裁剪出来的
43 | WebGL介绍(七):了解着色器变量值的绑定及三种三角形绘制模式之间的差异
44 | WebGL介绍(八):在着色器中使用共享变量,绘制一个颜色渐变的正方形
45 | WebGL介绍(九):完成动画
46 | WebGL介绍(十):绘制一个旋转的立方体
47 | WebGL介绍(十一):在3D绘制中使用纹理材质
48 | WebGL介绍(十二):如何创建相机、场景及光源
49 | WebGL介绍(十三):创建加载器、渲染器与控制器,完成3D模型文件的加载与展示
50 | 网络接口简介(一):如何使用wx.request接口
51 | 网络接口简介(二):将登录代码模块化封装
52 | 网络接口简介(三):Promise介绍及 6 个常用方法
53 | 网络接口简介(四):Promise三个方法any、all与race的使用介绍
54 | 网络接口简介(五):基于Promise+await、async关键字改写登录模块
55 | 网络接口简介(六):关于Page页面隐藏代码执行及Promise对象的catch处理的补充
56 | 网络接口简介(七):学习EventChannel对象
57 | 网络接口简介(八):观察者模式介绍及Event模块实现
58 | 网络接口简介(九):扩展wxp模块的request3方法,实现用户登录的自动融合
59 | tabBar组件(一):系统默认的tabBar组件如何开启及使用
60 | tabBar组件(二):基于系统提供的自定义方式,实现一个tabBar组件
61 | tabBar组件(三):通过自定义组件扩展的方式,给任意组件添加通用方法
62 | 开放接口(一):如何对Page进行全局扩展
63 | 开放接口(二):优化前后端登录代码,解决后端解密错误
当前位置:
首页>>
技术小册>>
微信小程序全栈开发实战(上)
小册名称:微信小程序全栈开发实战(上)
### 章节 29 | web-view(二):了解常见的四种鉴权方式 在微信小程序的全栈开发过程中,`web-view` 组件扮演着连接小程序与Web页面桥梁的重要角色,它允许开发者在小程序内嵌入H5页面,从而复用已有的Web资源或实现更为复杂的交互体验。然而,当涉及到数据安全与用户身份验证时,如何在`web-view`中有效地进行鉴权成为了不可忽视的问题。本章将深入探讨在`web-view`中常用的四种鉴权方式,包括Cookie鉴权、Token鉴权、OAuth鉴权以及微信小程序特有的登录态传递机制,帮助开发者在实际项目中做出合适的选择。 #### 一、Cookie鉴权 **1.1 Cookie基础** Cookie是一种由服务器发送到用户浏览器并保存在本地的小块数据,它会在浏览器后续向同一服务器发起请求时被携带上,从而实现跨请求的数据保持。在Web开发中,Cookie常被用于用户身份认证,即服务器在用户登录后,生成一个包含用户身份信息的Cookie发送给客户端,客户端在后续的请求中自动携带这个Cookie,服务器通过解析Cookie来识别用户身份。 **1.2 `web-view`中的Cookie鉴权实现** 在`web-view`中使用Cookie鉴权,主要依赖于小程序与Web页面之间的Cookie共享机制。然而,直接通过`web-view`组件加载的外部页面,默认情况下是无法直接访问小程序的Cookie的。因此,实现Cookie鉴权通常需要以下步骤: - **步骤一**:小程序端在用户登录后,将登录凭证(如token)发送给后端服务器。 - **步骤二**:后端服务器验证登录凭证后,生成相应的Cookie,并通过某种方式(如HTTP响应头中的`Set-Cookie`字段)返回给小程序。 - **步骤三**:由于小程序无法直接设置或读取浏览器Cookie,这里需要采用一种变通方式,如将Cookie存储在小程序的本地存储(Storage)中,并在`web-view`加载前,通过URL参数或自定义协议的方式将Cookie传递给Web页面。 - **步骤四**:Web页面接收到Cookie后,在后续的AJAX请求中通过JavaScript设置`withCredentials`属性为`true`,或在请求头中手动添加Cookie,以实现鉴权。 **1.3 优缺点分析** - **优点**:兼容性好,传统Web应用广泛使用的鉴权方式,易于理解和实现。 - **缺点**:安全性较低,Cookie易被拦截或篡改;依赖于客户端存储,存在被清除的风险;跨域请求时可能遇到同源策略限制。 #### 二、Token鉴权 **2.1 Token基础** Token(令牌)是一种安全的认证方式,它代表了一个用户身份及认证信息的数据包。与Cookie不同,Token通常存储在客户端(如本地存储、SessionStorage等),并在每次请求时作为请求头的一部分发送给服务器。服务器通过验证Token的有效性来确认用户身份。 **2.2 `web-view`中的Token鉴权实现** 在`web-view`中使用Token鉴权相对简单直接: - **步骤一**:小程序端在用户登录后,从后端获取到Token,并存储在本地。 - **步骤二**:当需要加载`web-view`时,将Token作为URL参数或自定义协议的一部分传递给Web页面。 - **步骤三**:Web页面接收到Token后,在后续的AJAX请求中将其作为请求头(如`Authorization`字段)发送给服务器。 - **步骤四**:服务器验证Token的有效性,并根据验证结果处理请求。 **2.3 优缺点分析** - **优点**:安全性较高,Token不易被拦截;支持跨域请求;客户端存储不依赖于浏览器Cookie,更加灵活。 - **缺点**:Token需要存储在客户端,存在被泄露的风险;若Token泄露,需要服务器支持Token的失效机制。 #### 三、OAuth鉴权 **3.1 OAuth基础** OAuth(开放授权)是一种为用户资源的授权提供了一个安全的、开放而又简单的标准。与Cookie和Token不同,OAuth引入了第三方授权服务器的概念,通过用户授权,第三方应用可以获得对用户在资源服务器上存储的数据的有限访问权限,而无需获取用户的用户名和密码。 **3.2 `web-view`中的OAuth鉴权实现** 在`web-view`中使用OAuth鉴权,通常涉及以下几个步骤: - **步骤一**:用户在小程序内触发OAuth登录流程,跳转到授权服务器页面。 - **步骤二**:用户在授权服务器页面上输入用户名和密码(或选择其他认证方式),并授权给小程序访问其资源。 - **步骤三**:授权服务器验证用户身份后,重定向回小程序指定的回调页面,并在URL中附带一个授权码(code)或直接通过某种方式(如前端路由)将Token传递给小程序。 - **步骤四**:小程序使用授权码向授权服务器请求Access Token(访问令牌)和Refresh Token(刷新令牌)。 - **步骤五**:小程序将Access Token存储在本地,并在加载`web-view`时,通过URL参数或自定义协议的方式传递给Web页面。 - **步骤六**:Web页面在后续的请求中使用Access Token进行鉴权。 **3.3 优缺点分析** - **优点**:安全性高,用户密码不直接暴露给第三方应用;支持多种授权方式;适合需要用户明确授权的场景。 - **缺点**:实现复杂,需要引入第三方授权服务器;用户体验可能因跳转流程而受到影响。 #### 四、微信小程序特有的登录态传递机制 **4.1 微信登录态概述** 微信小程序提供了一套基于微信开放平台的登录机制,允许小程序快速获取到用户的唯一标识(如openid)和会话密钥(session_key),从而实现对用户身份的识别和会话管理。微信登录态通常包括openid、session_key以及自定义的登录态(如服务器生成的Token)。 **4.2 登录态在`web-view`中的传递** 微信小程序特有的登录态传递机制主要依赖于小程序的登录API和自定义登录态的存储与传递: - **步骤一**:小程序端调用微信登录API,获取到openid和session_key。 - **步骤二**:小程序将openid和session_key发送给后端服务器,后端服务器根据这些信息生成自定义的登录态(如Token),并返回给小程序。 - **步骤三**:小程序将自定义登录态存储在本地,并在加载`web-view`时,通过URL参数或自定义协议的方式传递给Web页面。 - **步骤四**:Web页面接收到登录态后,在后续的请求中将其作为请求头或请求体的一部分发送给服务器,服务器验证登录态的有效性后处理请求。 **4.3 优缺点分析** - **优点**:利用微信平台的登录机制,简化用户登录流程;支持快速获取用户身份信息;便于实现多平台间的用户数据同步。 - **缺点**:依赖于微信平台,可能受到微信政策变化的影响;自定义登录态的存储和传递需要开发者自行处理,存在一定的安全风险。 #### 总结 在`web-view`中实现鉴权,是确保小程序与Web页面间数据安全与用户身份有效验证的重要环节。本章介绍了Cookie鉴权、Token鉴权、OAuth鉴权以及微信小程序特有的登录态传递机制四种常见的鉴权方式,每种方式都有其独特的优缺点和适用场景。开发者在选择鉴权方式时,应根据项目的实际需求、安全性要求以及用户体验等多方面因素进行综合考虑,以选择最适合自己项目的鉴权方案。
上一篇:
28 | web-view(一):了解session、cookie等相关基本概念
下一篇:
30 | web-view(三):如何使用koa框架,及如何进行热加载?
该分类下的相关小册推荐:
微信小程序与云开发(中)
微信小程序与云开发(下)
微信小程序全栈开发实战(中)
微信小程序底层框架实现原理
微信小程序与云开发(上)
微信小程序全栈开发实战(下)