本文单纯从简单的技术实现来讲,不涉及开放平台的多维度的运营理念。

什么是开放平台

通过开放自己平台产品服务的各种API接口,让其他第三方开发者在开发应用时根据需求直接调用,例如微信登录、QQ登录、微信支付、微博登录、热门等。
让第三方应用通过开发平台,使得自身海量数据资源得到沉淀(变现)
目前国内主流的网站的的开放平台,都是基于oauth2.0 协议进行做的开放平台

  • 微信开放平台授权机制流程图

  • 微博开放平台授权机制流程图

oauth2.0 授权码模式

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

引入相关依赖

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-oauth2</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-security</artifactId>
</dependency>

配置认证服务器

通过内存模式,初始化一个支持授权码模式的客户端

@Configuration
@AllArgsConstructor
@EnableAuthorizationServer
public class AuthorizationServerConfig extends AuthorizationServerConfigurerAdapter {@Override@SneakyThrowspublic void configure(ClientDetailsServiceConfigurer clients) {clients.inMemory().withClient("pigx") // client_id.secret("pigx") // client_secret.authorizedGrantTypes("authorization_code") // 该client允许的授权类型.scopes("app"); // 允许的授权范围}
}

初步完成,测试一下

注意这里是 /oauth/authorize 不是 /oauth/token 接口,只需要带 client_id 即可。

localhost:9999/oauth/authorize?client_id=pigx&response_type=code&redirect_uri=https://pig4cloud.com
  • 先进行basic 登录,默认用户user,密码已经打在控制台自己查即可
  • 授权确认
  • 登录成功带着code回调到目标接口
  • 通过/oauth/token获取登录令牌

简单的几步就完成上图微信或者其他网站的授权流程,不过目前为止 略显简陋

  1. 登录没有界面,用户密码数据库没有保存
  2. 确认授权界面太丑,没有个性化

配置安全登录

  • 配置未登录拦截重定向到 loginPage
  • 配置登录完成提交的页面路径 这里会被spring security 接管
@Primary
@Order(90)
@Configuration
public class WebSecurityConfigurer extends WebSecurityConfigurerAdapter {@Override@SneakyThrowsprotected void configure(HttpSecurity http) {http.formLogin().loginPage("/token/login").loginProcessingUrl("/token/form").and().authorizeRequests().anyRequest().authenticated();}
}

认证服务器配置用户加载规则实现

@Override
public void configure(AuthorizationServerEndpointsConfigurer endpoints) {endpoints.userDetailsService(pigxUserDetailsService)
}// 通过这步去加载数据的用户名密码
public interface UserDetailsService {UserDetails loadUserByUsername(String var1) throws UsernameNotFoundException;
}

重写原有认证页面

默认逻辑/oauth/confirm_access,让他重定向到我们自己的路径,然后进行个性哈

@Overridepublic void configure(AuthorizationServerEndpointsConfigurer endpoints) {endpoints.userDetailsService(pigxUserDetailsService).pathMapping("/oauth/confirm_access", "/token/confirm_access")}

获取上下文中的授权信息,传给前端

 /*** 确认授权页面** @param request* @param session* @param modelAndView* @return*/@GetMapping("/confirm_access")public ModelAndView confirm(HttpServletRequest request, HttpSession session, ModelAndView modelAndView) {Map<String, Object> scopeList = (Map<String, Object>) request.getAttribute("scopes");modelAndView.addObject("scopeList", scopeList.keySet());Object auth = session.getAttribute("authorizationRequest");if (auth != null) {AuthorizationRequest authorizationRequest = (AuthorizationRequest) auth;ClientDetails clientDetails = clientDetailsService.loadClientByClientId(authorizationRequest.getClientId());modelAndView.addObject("app", clientDetails.getAdditionalInformation());modelAndView.addObject("user", SecurityUtils.getUser());}modelAndView.setViewName("ftl/confirm");return modelAndView;}

最终效果

  • 把用户头像等信息展示出来就蛮好看了

总结

  • 以上源码参考个人项目 基于Spring Cloud、OAuth2.0开发基于Vue前后分离的开发平台
  • QQ: 2270033969 一起来聊聊你们是咋用 spring cloud 的吧。
  • 欢迎关注我们的公众号获得更多的好玩JavaEE 实践

基于oauth 2.0 实现第三方开放平台相关推荐

  1. 基于 Oauth 2.0 的第三方账号登录实现

    基于 Oauth 2.0 的第三方账号登录实现 Oauth 2.0 原理与授权流程 1.刚开始的第三方应用接入其他账号登录过程:  存在问题: 1.用户账号.密码信息透露给了第三方应用,导致安全问题 ...

  2. 谈谈基于OAuth 2.0的第三方认证 [上篇]

    对于目前大部分Web应用来说,用户认证基本上都由应用自身来完成.具体来说,Web应用利用自身存储的用户凭证(基本上是用户名/密码)与用户提供的凭证进行比较进而确认其真实身份.但是这种由Web应用全权负 ...

  3. B2B2C网上商城开发指南——基于SaaS和淘宝API开放平台

    B2B2C网上商城开发指南--基于SaaS和淘宝API开放平台邢波涛  郭  娟  著 ISBN 978-7-121-12983-4 2011年4月出版 定价:49.00元 16开 388 页 内 容 ...

  4. 微信开发(4):微信第三方开放平台的搭建(java)

    什么是第三方开放平台 来波官方解释: 我才是官方文档 第三方平台的开放,让公众号或小程序运营者在面向垂直行业需求时,可以通过一键登录授权给第三方开发者,来完成相关能力. 简单的说,就是让公众号授权给第 ...

  5. 斗鱼第三方开放平台2.2版使用记录

    这是斗鱼第三方开放平台2.2版本的使用笔记 该文档在2018-08-25号亲测有效,开放文档 获取房间列表 获取所有直播房间列表,后面不跟任何参数 http://open.douyucdn.cn/ap ...

  6. Spring Security系列(11)- Security5.0版本Oauth2开放平台环境搭建

    前言 上篇文档,我们了解了OAuth2.0的相关知识,接下来我们搭建一个自己的Oauth2开放平台. 从流程图中,可以看到,后台需要搭建一个认证服务器,负责用户登录.第三方授权等功能,还需要搭建自己的 ...

  7. 手把手教你如何通过OAuth2.0新浪开放平台认证新浪用户-java

    新浪微博·开放平台: http://open.weibo.com/ 自己想写个应用需要新浪微博的用户认证,弄了1天各种错误,参考了大量网上的解释终于成功, 经验写下来和大家分享. 一.创建自己的第一个 ...

  8. php第三方开放平台,开放平台第三方产品授权教程

    lass="quote 15">有赞开放平台介绍: 有赞开放平台,是指通过与外部第三方连接,为商家创造更多价值的有赞生态建设部门.基于有赞系统开放API接口,连接各地靠谱的第 ...

  9. 微信 第三方开放平台 获取小程序授权并绑定小程序到开放平台(都是坑,留下帮助后人) 一

    接到需求,开发第三方平台的API对接,开始躺坑之路 第一步:获取小程序授权 看看官方给的流程图 OK,想获取授权就得获取 预授权码 看看预授权吧!! OK,想获取预授权码就得获取 令牌  OK OK  ...

最新文章

  1. void函数返回值_(*void(*)()0)() 是什么
  2. SQL Server 2014 许可证(五)降级与升级
  3. Reactjs 的 PropTypes 使用方法
  4. 如何用树莓派和PHP开发一个比特币和以太坊交易机器人
  5. java 结构数据结构_Java 数据结构
  6. ios开发text kit_iOS富文本(三)深入使用Text Kit
  7. 电脑故障检测软件_有什么软件可以检测出电脑配置是否达到游戏配置。
  8. 史上最全的stm32资料库4---常见问题及编译工具篇
  9. Jenkins 中定时任务构建
  10. python删除文件命令_python 删除文件夹
  11. 21day学通python_python21day
  12. 龙邱STM32单片机用J-LINK下载无法被识别的解决方法
  13. Python中断并继续
  14. Pygame实战:这款“欢乐打地鼠”小游戏让几亿人“上瘾“?不玩绝对是你的损失。
  15. python数独解题器_python 数独解
  16. 3-5数据链路层-局域网
  17. ubuntu18.04 安装flash。
  18. xbox手柄usb连接linux python控制
  19. amp模式_AMP的完整形式是什么?
  20. 分享一道蚂蚁金服笔试题

热门文章

  1. 聚划算超级聚享日为当代青年人打造理想家居空间
  2. 求1到100之间的所有的整数和,包括100
  3. HTML笔记(form与table标签区别,区分利用ul,dl与table标签)
  4. 网站应加强个性化建设 提升SEO优化效果分析
  5. 2018年蓝桥杯C++A组幸运数字
  6. American Fuzzy Lop(AFL)的安装与简单使用
  7. 梯度(Gradient vectors)
  8. excel折线图坐标轴刻度不均匀设置的方法教程
  9. 基于Bayer的数字图像还原
  10. python回合制游戏教程_Python基础之面向对象(回合制游戏)