基于oauth 2.0 实现第三方开放平台
本文单纯从简单的技术实现来讲,不涉及开放平台的多维度的运营理念。
什么是开放平台
通过开放自己平台产品服务的各种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获取登录令牌
简单的几步就完成上图微信或者其他网站的授权流程,不过目前为止 略显简陋
- 登录没有界面,用户密码数据库没有保存
- 确认授权界面太丑,没有个性化
配置安全登录
- 配置未登录拦截重定向到 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 实现第三方开放平台相关推荐
- 基于 Oauth 2.0 的第三方账号登录实现
基于 Oauth 2.0 的第三方账号登录实现 Oauth 2.0 原理与授权流程 1.刚开始的第三方应用接入其他账号登录过程: 存在问题: 1.用户账号.密码信息透露给了第三方应用,导致安全问题 ...
- 谈谈基于OAuth 2.0的第三方认证 [上篇]
对于目前大部分Web应用来说,用户认证基本上都由应用自身来完成.具体来说,Web应用利用自身存储的用户凭证(基本上是用户名/密码)与用户提供的凭证进行比较进而确认其真实身份.但是这种由Web应用全权负 ...
- B2B2C网上商城开发指南——基于SaaS和淘宝API开放平台
B2B2C网上商城开发指南--基于SaaS和淘宝API开放平台邢波涛 郭 娟 著 ISBN 978-7-121-12983-4 2011年4月出版 定价:49.00元 16开 388 页 内 容 ...
- 微信开发(4):微信第三方开放平台的搭建(java)
什么是第三方开放平台 来波官方解释: 我才是官方文档 第三方平台的开放,让公众号或小程序运营者在面向垂直行业需求时,可以通过一键登录授权给第三方开发者,来完成相关能力. 简单的说,就是让公众号授权给第 ...
- 斗鱼第三方开放平台2.2版使用记录
这是斗鱼第三方开放平台2.2版本的使用笔记 该文档在2018-08-25号亲测有效,开放文档 获取房间列表 获取所有直播房间列表,后面不跟任何参数 http://open.douyucdn.cn/ap ...
- Spring Security系列(11)- Security5.0版本Oauth2开放平台环境搭建
前言 上篇文档,我们了解了OAuth2.0的相关知识,接下来我们搭建一个自己的Oauth2开放平台. 从流程图中,可以看到,后台需要搭建一个认证服务器,负责用户登录.第三方授权等功能,还需要搭建自己的 ...
- 手把手教你如何通过OAuth2.0新浪开放平台认证新浪用户-java
新浪微博·开放平台: http://open.weibo.com/ 自己想写个应用需要新浪微博的用户认证,弄了1天各种错误,参考了大量网上的解释终于成功, 经验写下来和大家分享. 一.创建自己的第一个 ...
- php第三方开放平台,开放平台第三方产品授权教程
lass="quote 15">有赞开放平台介绍: 有赞开放平台,是指通过与外部第三方连接,为商家创造更多价值的有赞生态建设部门.基于有赞系统开放API接口,连接各地靠谱的第 ...
- 微信 第三方开放平台 获取小程序授权并绑定小程序到开放平台(都是坑,留下帮助后人) 一
接到需求,开发第三方平台的API对接,开始躺坑之路 第一步:获取小程序授权 看看官方给的流程图 OK,想获取授权就得获取 预授权码 看看预授权吧!! OK,想获取预授权码就得获取 令牌 OK OK ...
最新文章
- void函数返回值_(*void(*)()0)() 是什么
- SQL Server 2014 许可证(五)降级与升级
- Reactjs 的 PropTypes 使用方法
- 如何用树莓派和PHP开发一个比特币和以太坊交易机器人
- java 结构数据结构_Java 数据结构
- ios开发text kit_iOS富文本(三)深入使用Text Kit
- 电脑故障检测软件_有什么软件可以检测出电脑配置是否达到游戏配置。
- 史上最全的stm32资料库4---常见问题及编译工具篇
- Jenkins 中定时任务构建
- python删除文件命令_python 删除文件夹
- 21day学通python_python21day
- 龙邱STM32单片机用J-LINK下载无法被识别的解决方法
- Python中断并继续
- Pygame实战:这款“欢乐打地鼠”小游戏让几亿人“上瘾“?不玩绝对是你的损失。
- python数独解题器_python 数独解
- 3-5数据链路层-局域网
- ubuntu18.04 安装flash。
- xbox手柄usb连接linux python控制
- amp模式_AMP的完整形式是什么?
- 分享一道蚂蚁金服笔试题