基于SPA的网页授权流程(微信OAuth2)

先说传统MVC网站的网页授权流程。

1.用户发起了某个需要登录执行的操作

2.收集AppId等信息重定向到微信服务器

3.微信服务器回调到网站某个Controller的Action

4.在此Action下通过得到的code请求得到access_token,并用a_t进一步获取用户信息,至此授权流程完成,可以保存用户信息到数据库和cookie,重定向回原页面

SPA架构下的问题

1.服务端与前端之间不保证可信,需要认证交互

2.使用WebApi交互,无法在服务端控制前端的页面跳转

3.认证过程中有安全级别较高的数据(access_token),不应该暴露在客户端,直接导致认证流程必须前端与WebApi配合完成

作者:Yitimo
链接:https://www.jianshu.com/p/27b8069b4178
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

这里给出一张基于ng2的前后端分离的SPA的交互流程图,只需要关心右下部分需要用户数据但localStorage中没有(也就是说用户未登录)的情况。

这里给出了三条登录方式,前两种(QQ与微信的授权登录)均是第三方平台的OAuth2认证登录方式,第三种是暂不必实现但迟早会加入的用户注册登录方式,为了支持多种方式(授权或注册),必须给出很通用可扩展的登录流程。

来谈微信授权的流程

1.第一步肯定是发起授权,即引导用户点击url重定向到微信的api,一般的实现都是location.href直接重定向。

注意:第一步完成后实际上用户浏览器已经丢失客户端页面了,页面已经到了微信的授权页面,这是微信的站点

2.当用户点击同意授权后微信会生成一个code和state并请求我们提供的redirect_uri,此uri必须是前端页面。

传统MVC网站下页面的Action与WebApi概念不必区分的很清楚,给人的感觉就是你写了一个redirect_uri(比如/OAuth/Callback),微信就传参数到这个action,这个action处理完后一个重定向就回到原页面结束了,代码全都是服务端语言来实现。但是单页应用下,服务器概念移除,这个回调页面就得是某个前端页面,然后在这个页面里处理微信传来的参数。

3.微信回调到前端页面得到的参数只有一个发起时带上的state(可以用来定向回发起页)和一个code(只能使用一次且很快过期),所以现在必须用code来换取access_token,再用access_token换取实际用户信息,这些事情显而易见不应该由客户端来完成。

4.客户端用code请求WebApi,由WebApi进行后续的access_token与用户信息获取操作。

授权的发起需要的参数仅为AppId,不需要AppSecret,所以此操作由客户端进行完全没问题,但是得到code后的后续请求的数据安全系数很高,所以一定要由安全的服务器来实现,也就是WebApi。

5.具体的流程视需求而定,总而言之假设WebApi现在通过code已经完成了用户信息的获取与保存,那就将必要的登录信息返回给前端,前端再将其保存到localStorage即可。

6.后续再遇到需要登录数据的业务时,先从localStorage获取,这是正常用户已登录的场景(localStorage可能太过暴力,也可以用sessionStorage),一旦本地没有了登录数据,则回到步骤1重新发起授权,完美。

注意:登录数据保存在客户端是必须的事情,但一定不要保存重要敏感数据,客户端的任何数据都应该视为不可靠数据,只能做一些假设,假设只要提供给了WebApi特定的数据,就视这次请求为合法请求,并尽量增加请求伪造的门槛。

作者:Yitimo
链接:https://www.jianshu.com/p/27b8069b4178
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

原文地址:https://www.cnblogs.com/ymh2013/p/9279888.html

时间: 2024-10-12 12:56:20

基于SPA的网页授权流程(微信OAuth2)的相关文章

手把手实现微信网页授权和微信支付,附源代码(VUE and thinkPHP)

wechat github 概述 公众号开发是痛苦的,痛苦在好多问题开发者文档是没有提到的,是需要你猜的. 在开发过程中翻了好多的文档,都是说明其中的一部分问题的,很费时间,所以在此总结大体过程.我们模拟的是一个支付的商城,在实现购买过程中基本是把微信公众号最主要模块实现了,其余的功能我们没有涉及,但应该是触类旁通的. 我们叙述的过程是按开发流程进行叙述的,不会是按照开发文档的形式叙述,希望您能结合微信的开发文档一起阅读,当然在流程中我们会提醒你阅读的部分 目录 概述 [解决的问题] [前端技术

微信网页授权流程(前端篇)

功能描述 公司最近有个项目要做基于微信的H5校服定制wepApp的开发,之前完全没有接触过微信开发,很是兴奋,有种磨刀霍霍向猪羊的感觉.由于本人经验有项,描述不准确的地方请大家及时指出. 功能描述:当用户点击如下所示的图片获取用户的信息,包括openid,头像等. 准备工作 (1)在公众号后台"设置-公众号设置-功能设置-网页授权域名"设置回调的域名. (2)在对应位置按照公众号开发文档给出的规则设置回调地址. 如果是通过子菜单触发跳转,记得在"功能-自定义菜单-子菜单内容&

微信网页授权接口 微信绑定 微信登录

<?php/** * Created by PhpStorm. * User: yihuaiyuan * Date: 16/9/9 * Time: 下午12:46 */ /** * 网页授权接口的详细步骤总结 */ /** * 准备工作 * * 1.有一台可以访问的服务器,最好能绑定域名,通过域名可以直接访问到 * 我这里是阿里云ecs * * 2.有一个微信公众平台的账号,最好是认证的服务号 * 我这里是微信开发者中心申请的测试账号 * * 3.准备好开发环境, * 我这里是php语言 */

微信公众平台开发,模板消息,网页授权,微信JS-SDK,二维码生成(4)

微信公众平台开发,模板消息,什么是模板消息,模板消息接口指的是向用户发送重要的服务通知,只能用于符合场景的要求中去,如信用卡刷卡通知,购物成功通知等等.不支持广告营销,打扰用户的消息,模板消息类有固定的模板,每个账号可以使用25个模板,模板消息上线每日10万次,粉丝数上涨到10w/100w/1000w/模板消息的上线次数会自动上调.模板接口调用主要注意事项:模板ID和模板赋值这两点.模板参数内容必须以.DATA结尾,模板保留符号"{{}}".使用步骤如下: 1.设置所属行业,这个可以在

微信OAuth2.0网页授权接口

微信OAuth2.0网页授权接口 微信OAuth2.0网页授权接口的thinkphp实现版本号.主要实现了oauth网页受权,以及部分其它接口. 用法 为什么用OAuth2.0受权? 通过OAuth2.0受权的网页将会获取到打开者的微信信息.甚至包含微信昵称.头像等实用的数据,开发人员们能够凭此设计出很多其它更丰富的页面应用,比方近期一直非常火爆的红包类活动.除此之外还有个额外的优点,就是能够控制页面在非微信浏览器中无法打开,能够降低代码被人窥窃的风险. 那么红包类活动是怎样使用OAuth2.0

微信OAuth2网页授权获取用户信息

文档:http://mp.weixin.qq.com/wiki/17/c0f37d5704f0b64713d5d2c37b468d75.html !!! 微信跟用户没有关系类接口采用了OAUTH2 [客户端模式(Client Credentials Grant)],而跟用户有关系的接口,采用OAuth2.0服务端[授权码模式(Authorization Code)]来获得用户的openid:另外需要注意的一点就是需要在开发者中心页配置授权回调域名,域名必须与设置的域名在同一个域下. 网页授权ac

Force.com微信开发系列(七)OAuth2.0网页授权

OAuth是一个开放协议,允许用户让第三方应用以安全且标准的方式获取该用户在某一网站上存储的私密资源(如用户个人信息.照片.视频.联系人列表),而无须将用户名和密码提供给第三方应用.本文将详细介绍OAuth协议以及在微信里的具体实现. OAuth2.0协议介绍 OAuth2.0是OAuth协议的下一版本,但不向后兼容OAuth 1.0. OAuth 2.0关注客户端开发者的简易性,同时为Web应用,桌面应用和手机,和起居室设备提供专门的认证流程. OAuth2.0允许用户提供一个令牌,而不是用户

Java微信公众平台开发之OAuth2.0网页授权

根据官方文档点击查看在微信公众号请求用户网页授权之前,开发者需要先到公众平台官网中的"开发 - 接口权限 - 网页服务 - 网页帐号 - 网页授权获取用户基本信息"的配置选项中,修改授权回调域名.请注意,这里填写的是域名(是一个字符串),而不是URL,因此请勿加 http:// 等协议头,也不需要加具体的项目名,在域名空间的根目录放一个txt文件才能验证通过一.两种scope授权方式 以snsapi_base为scope发起的网页授权,是用来获取进入页面的用户的openid的,并且是静

微信公众平台开发 OAuth2.0网页授权认证

一.什么是OAuth2.0 官方网站:http://oauth.net/   http://oauth.net/2/ 权威定义:OAuth is An open protocol to allow secure authorization in a simple and standard method from web, mobile and desktop applications. OAuth是一个开放协议,允许用户让第三方应用以安全且标准的方式获取该用户在某一网站.移动或桌面应用上存储的私