文档章节

从微信公众号平台谈开放API权限业务

稻草鸟人
 稻草鸟人
发布于 2017/06/26 12:26
字数 1045
阅读 156
收藏 0

共识

首先我们应该达成一定的共识

  • 作为对外提供服务的开放平台,首先需要的是被服务方在开放平台进行注册,只有注册过的调用方才能调用我开放平台的服务
  • 开放平台提供多种服务,开发平台内部系统包罗万象,所以通常情况下,内部服务器不直接对外,都是通过网关系统或者前置机
  • 本文主要介绍的是spring cloud oauth、security相关知识,apache oltu等其他oauth框架本文不涉及

必备知识

业务流程(举例:调用微信创建菜单接口)

下面我们举例的业务流程是其实是介绍的OAUTH2.0协议中客户端授权模式来介绍的,这点应该首先有个概念

首先需要去微信公众号注册一个帐号,开发者模式会为我们提供一个clientId和clientSecert,我们拿这个clientId和clientSecert去获取access_token,调用具体创建菜单接口的时候把获取到的access_token带上,否则无权调用接口会被拒绝

项目结构

  • microservice-common 模块是存放公共组建,比如工具类、共用接口、domain等
  • microservice-eureka-server 模块是服务注册中心
  • microservice-oauth 是授权中心
  • microservice-order-service 是订单中心(具体的服务)
  • microservice-sleuth-server 是代码追踪服务
  • microservice-zuul-server 模块是网关,所有的服务通过网管对外提供服务 
    microservice-oauth 和 microservice-zuul-server 是本次介绍的重点。microservice-zuul-server 我们可以理解为开放平台

microservice-oauth 授权、鉴权

调用方在开放平台进行注册,以及获取access_token 对于授权中心来说一定要进行存储吧,很多网上的例子都是把这些数据存储在内存里面,我觉得这种例子就没必要介绍了,一是网上有很多,二是没有实际意义,这里我们把数据存储在MYSQL数据库中。其实如果可以存储在redis里面更好,原因有二,一是读取效率更高,二是redis可以和网关模块共享。

  • 建表语句 MYSQL OAUTH SCHEMA 
    上述建表语句中有一些字段类型是LONGVARBINARY,这里我们把他调整为BLOB,因为MYSQL没有LONGVARBINARY这种类型

  • 授权中心会对外提供两个接口,一个是/oauth/token 获取access_token接口,一个是/oauth/check_token接口,用于检查检查token是否是授权过的。代码分别在TokenEndpoint.java 和 CheckTokenEndpoint.java中

microservice-zuul-server

这个是一个网关模块,网关要做的事情很多,通常情况下可以做这些事

  • 服务鉴权 当然是通过调用microservice-oauth模块进行验证的,怎么做?spring-security-oauth的jar包里面有个Filter叫OAuth2AuthenticationProcessingFilter已经帮我们做好了,我们所要做的就是告诉它,调用我们microservice-oauth提供服务的地址是什么就可以
  • 流量控制 微信公众号还有一些其他类似的社交开放平台翻了下文档,它没有做并发控制,只是对具体接口做了限额
  • 接口限额
  • 其他

microservice-sleuth-server

这个是做代码调用追踪的,可以看到具体的调用链路,调用次数等信息,这里spring cloud是集成了zipkin来做的,大概可以看到如下的效果

但是呢,这里有一点点的小问题,问题是什么呢? 
上面我说zuul会有一个拦截器,他会取我们调用接口里面是否包含access_token,并通过http调用我们的鉴权服务器进行验证,但是对于zipkin来说,通过网关去访问我们具体的业务,而其中的filter不属于这个调用链

权限验证业务流程

总结

以上就是我个人认为一个对外接口或者说是开放平台的基本流程和功能,如果是我的话,我会以上面介绍的这种方式来进行扩展,不当之处还请兄弟姐妹们指正,轻点拍砖

© 著作权归作者所有

稻草鸟人

稻草鸟人

粉丝 51
博文 12
码字总数 10204
作品 0
上海
后端工程师
私信 提问
一张图清晰解释微信三方平台获取授权流程

在这篇文章中: 背景 授权步骤 授权流程总览 参考资料 背景 微信公众平台体系,大家最为熟悉的,一个是公众号,另一个就是小程序。如果需要使用公众号的高级功能,那么大家首先想到的就是自组...

amc
2018/12/05
0
0
微信订阅号的自定义菜单是在搞什么鬼

微信公众号一开始是服务号有自定义菜单接口,开发者可以很方便的调用接口为服务号创建菜单。订阅号先是没有菜单,后来腾讯开恩允许在公众号后台设置菜单,再后来又开放了自定义菜单查询接口(...

祺爸PiscDong
2015/04/30
3K
2
第三方平台正式支持接入微信公众平台JS-SDK

  之前微信公众平台面向开发者开放微信内网页开发工具包,现在第三方平台也能正式支持接入微信公众平台JS-SDK了,第三方平台可以在获得公众号的授权后,通过JS-SDK帮助公众号开发和实现网页...

ytkahcom
2015/02/05
0
0
Anyon/wechat-php-sdk

此运行最底要求版本, 建议在上运行以获取最佳性能。 微信的部分接口需要缓存数据在本地,因此对目录需要有写权限。 我们鼓励大家使用来管理您的第三方库,方便后期更新操作(尤其是接口类)。...

Anyon
2015/05/23
0
0
01第三方平台概述

第三方平台概述 一、概述 公众平台第三方平台是为了让公众号或小程序运营者,在面向垂直行业需求时,可以一键授权给第三方平台(并且可以同时授权给多家第三方),通过第三方平台来完成业务,...

MadDragon
2018/03/12
132
0

没有更多内容

加载失败,请刷新页面

加载更多

elasticsearch查询20公里以内的数据并按距离升序排序data es写法

NativeSearchQueryBuilder queryBuilder = new NativeSearchQueryBuilder();BoolQueryBuilder boolQueryBuilder=new BoolQueryBuilder();//这暂wei加入业务查询条件 queryBuilder.withQue......

为何不可1995
15分钟前
3
0
superset在线pip部署

1、安装依赖sudo yum install gcc libffi-devel python-devel python-pip python-wheel openssl-devel libsasl2-devel openldap-devel报错:没有可用软件包 python-pip。没有可用软件包 ......

阿伦哥-
20分钟前
4
0
photoshop简单使用

PS基本操作与图片格式 photoshop工具 组成 菜单项 工具栏 辅助面板 图片格式 jpg png gif 注: psd photoshop CC链接: https://pan.baidu.com/s/1LVa5R_btSjczLBwskCZidQ 提取码:sc3v 快捷...

studywin
22分钟前
3
0
springboot 整合pageHelper

今天跟大家聊聊springboot整合pageHelp,首先pageHelper是一个缓存式分页,分页步骤如下: 1 pom文件添加依赖 <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelp......

gaofei123
23分钟前
5
0
《DNS攻击防范科普系列1》—你的DNS服务器真的安全么?

DNS服务器,即域名服务器,它作为域名和IP地址之间的桥梁,在互联网访问中,起到至关重要的作用。每一个互联网上的域名,背后都至少有一个对应的DNS。对于一个企业来说,如果你的DNS服务器因...

大涛学弟
23分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部