当前位置: 首页 > news >正文

04.spring security oauth2认证中心 集成zuul网关的代码分析

Oauth2

oauth2是一个搞授权的,对于Api网关来说,用oauth2来做业务鉴权是比较合适的选择,其有几种角色的定义:
资源拥有者(resource owner):能授权访问受保护资源的一个实体,可以是一个人,那我们称之为最终用户;
资源服务器(resource server):存储受保护资源,客户端通过access token请求资源,资源服务器响应受保护资源给客户端;
授权服务器(authorization server):成功验证资源拥有者并获取授权之后,授权服务器颁发授权令牌(Access Token)给客户端。
客户端(client):第三方应用,也可以是它自己的官方应用;其本身不存储资源,而是资源拥有者授权通过后,使用它的授权(授权令牌)访问受保护资源,然后客户端把相应的数据展示出来/提交到服务器。

oauth2原理图
04.spring security oauth2认证中心 集成zuul网关的代码分析

zuul作为业务网关需要对其内部的服务进行权限控制,采用oauth2的资源服务器集成到zuul中可以很好的保护zuul内部的服务,需要搭建服务注册中心,认证中心,鉴权中心三大板块,其中鉴权中心是和zuul整合在一起充当门面设计,zuul判断哪些服务需要token哪些不需要。
服务注册中心:open-eureka-server,此项目为eureka-server服务器,eureka客户端通过服务名实现ribbon的负载均衡,具体。
认证中心:open-oauth-server,此项目结合了spring cloud oauth2的认证服务器功能,实现了派发token的作用,同时此认证中心纳入到了服务注册中心,实现高可用。

鉴权中心:open-api-gateway ,此项目为业务网关同时也是资源服务器,可以接入各种微服务子项目,通过配置AuthorizeConfigProvider实现具体鉴权或放权功能。

解决Principal must not be null的关键在于OAuth2AuthenticationManager类种的 tokenServices.loadAuthentication(token),认证中心以及鉴权中心需要同时实现一下接口
public class RedisTemplateTokenStore implements TokenStore {

private static final String ACCESS = "access:";
private static final String AUTH_TO_ACCESS = "auth_to_access:";
private static final String AUTH = "auth:";
private static final String REFRESH_AUTH = "refresh_auth:";
private static final String ACCESS_TO_REFRESH = "access_to_refresh:";
private static final String REFRESH = "refresh:";
private static final String REFRESH_TO_ACCESS = "refresh_to_access:";
private static final String CLIENT_ID_TO_ACCESS = "client_id_to_access:";
private static final String UNAME_TO_ACCESS = "uname_to_access:";

}即可解决Principal must not be null报错,此方式也是最具效率的方式,Principal must not be null报错是由于采用的RemoteTokenServices方式校验token,这种方式需要通过http连接认证中心,认证中心需要从redis种校验token,采取RedisTemplateTokenStore重写token方式可以直连redis避免额外的http消耗。

04.spring security oauth2认证中心 集成zuul网关的代码分析

sso连接zuul
security:
user:
password: 123456
oauth2:
sso:
login-path: /login
client:
client-id: owen
client-secret: owen
user-authorization-uri: http://127.0.0.1:9200/auth/oauth/authorize ##网关地址负载认证中心服务
access-token-uri: http://127.0.0.1:9200/auth/oauth/token ##网关地址负载认证中心服务
resource:
token-info-uri: http://127.0.0.1:9200/auth/oauth/check_token ##网关地址负载认证中心服务
prefer-token-info: true

为实现以上部分 必须注入RandomValueAuthorizationCodeServices持久化授权码,oauth2有jdbc相关实现,可以参考JdbcAuthorizationCodeServices改成redis方法 提高性能 。

开源项目:https://gitee.com/owenwangwen/open-capacity-platform
联系作者qq:624191343 1758783856

转载于:https://blog.51cto.com/13005375/2068205

相关文章:

  • 2018 掌握好这几点方法学习Linux,一定比别人更快入门运维!
  • python小白项目推荐
  • 使用Jackson来实现java对象和json格式的相互转换
  • Python设计模式——观察者模式
  • 如何免费创建移动端论坛APP?
  • 3.7字典
  • css线性炫酷动画
  • maven版本与jdk版本 对应关系
  • JSP --学习
  • js 拾遗之return
  • Linux颜色文件+tab+快捷键
  • [HNOI2010]BUS 公交线路
  • 瀑布开发和敏捷开发
  • 静态链表
  • SDUT OJ 数据结构实验之链表六:有序链表的建立
  • Facebook AccountKit 接入的坑点
  • IE报vuex requires a Promise polyfill in this browser问题解决
  • JavaScript设计模式系列一:工厂模式
  • Koa2 之文件上传下载
  • Laravel 菜鸟晋级之路
  • Python利用正则抓取网页内容保存到本地
  • SAP云平台运行环境Cloud Foundry和Neo的区别
  • 大数据与云计算学习:数据分析(二)
  • 飞驰在Mesos的涡轮引擎上
  • 好的网址,关于.net 4.0 ,vs 2010
  • 聊聊flink的TableFactory
  • 那些年我们用过的显示性能指标
  • 前端面试之CSS3新特性
  • 如何利用MongoDB打造TOP榜小程序
  • 腾讯视频格式如何转换成mp4 将下载的qlv文件转换成mp4的方法
  • 以太坊客户端Geth命令参数详解
  • 职业生涯 一个六年开发经验的女程序员的心声。
  • [地铁译]使用SSD缓存应用数据——Moneta项目: 低成本优化的下一代EVCache ...
  • 资深实践篇 | 基于Kubernetes 1.61的Kubernetes Scheduler 调度详解 ...
  • ​人工智能之父图灵诞辰纪念日,一起来看最受读者欢迎的AI技术好书
  • # 安徽锐锋科技IDMS系统简介
  • (01)ORB-SLAM2源码无死角解析-(66) BA优化(g2o)→闭环线程:Optimizer::GlobalBundleAdjustemnt→全局优化
  • (2)(2.10) LTM telemetry
  • (2/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (c语言)strcpy函数用法
  • (附源码)springboot工单管理系统 毕业设计 964158
  • (实战)静默dbca安装创建数据库 --参数说明+举例
  • (四) 虚拟摄像头vivi体验
  • (原创) cocos2dx使用Curl连接网络(客户端)
  • (原創) 如何優化ThinkPad X61開機速度? (NB) (ThinkPad) (X61) (OS) (Windows)
  • (转)nsfocus-绿盟科技笔试题目
  • (转载)Google Chrome调试JS
  • .NET Core 网络数据采集 -- 使用AngleSharp做html解析
  • .Net Winform开发笔记(一)
  • .NET/C# 使用 SpanT 为字符串处理提升性能
  • .NET企业级应用架构设计系列之结尾篇
  • @vue/cli脚手架
  • []Telit UC864E 拨号上网
  • [20180312]进程管理其中的SQL Server进程占用内存远远大于SQL server内部统计出来的内存...
  • [autojs]逍遥模拟器和vscode对接