当前关于这方面的系统资料较少,所以大可能是找寻网上零散的示例解析,结合官方文档中的demo再加上源码跟踪调试来进行学习与搭建。但因为涉及的知识点较多,且零散示例中配置或实现方式各有不一样,做者常常只会记录关键、核心部份内容,所以会漏掉一些基础配置信息,给初学者带来极大困难。每每按照多个示例拼凑出来的demo没法正常运行,或者不明就里。官方给出的文档又须要具有必定英文功底。综合以上因素,这篇文章横空出世:)既包含周边理论知识浅析,又包含实际案例demo完整代码(为了保证下载便可正常运行已附上SQL语句)html
涉及知识点:spring
l Oauht2基础知识(受权类型,运行流程)安全
l SpringBoot项目增长https支持(https协议简单概述)服务器
l Keytools工具基本使用(经常使用命令参数解析及证书类别)微信
l Springsecurity知识(spring-security-oauth2是基于springsecurit的,不少配置相关都是沿用springsecurity的)app
l 具体项目实现(包含服务端及客户端具体实现,鉴权、SSO)工具
既然是要搭建基于spring-security-oauth2的受权服务器,那Oauth2的基础原理和运行流程咱们仍是须要了解一下的,不然对于受权模式选择和认证受权流程会比较晕。对于Oauth2的介绍这里强烈推荐: 理解OAuth2.0,在这里只简单描述和摘抄部分关键信息。学习
核心角色介绍:调试
l 三方客户端code
l 资源全部者
l 认证服务器
l 资源服务器
为了便于理解,这里举一个你们耳熟能详的应用场景来介绍各个角色在实际应用中是如何交互的:在一个愉快的周六午后,小明同窗吃完午餐就火烧眉毛的躺在床上,拿起手机打开吃鸡游戏(三方客户端),为了便于同朋友开黑,小明选择了微信登录的方式,这时候吃鸡游戏(三方客户端)跳转到一个微信登录认证页面(认证服务器),在这里小明(资源全部者)输入帐号密码(身份认证),登录成功后界面上显示:是否受权使吃鸡游戏能够访问你的微信头像、昵称、好友资料等。(受权)。受权经过后,剩下是后台处理,用户不可见(返回给客户端一个受权码,客户端拿到受权码结合开始申请受权时的appkey申请token,经过后客户端凭着这个token去资源服务器获取用户头像、昵称等信息)
关于这4种受权模式的区别,详细内容请参见OAuth2.0,在这里我给出了本身比较土的解释:
受权码模式:安全性最高,也是比较经常使用的方式,可是整个流程最长。运行流程见上面举的“吃鸡”游戏登录受权例子。
简化模式: 跳过了获取受权码的环节,后续流程同受权码模式。
密码模式:把帐号密码给到客户端程序,由客户端程序去请求认证服务器获取token,这种方式客户端是可以获取到用户名、密码信息的。
客户端模式:这种其实就和用户受权没什么关系,须要认证的主体是客户端自己了,客户端自己以本身的名义去找认证服务器要受权。