博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
04.spring security oauth2认证中心 集成zuul网关的代码分析
阅读量:6113 次
发布时间:2019-06-21

本文共 2166 字,大约阅读时间需要 7 分钟。

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: ##网关地址负载认证中心服务
access-token-uri: ##网关地址负载认证中心服务
resource:
token-info-uri: ##网关地址负载认证中心服务
prefer-token-info: true

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

开源项目:

联系作者qq:624191343 1758783856

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

你可能感兴趣的文章
远程桌面连接技巧--与主机拷贝文本及拷贝文件(转)
查看>>
MVC中下拉框显示枚举项
查看>>
Linux基础精华
查看>>
SqlServer2008第一次安装后连接问题
查看>>
cocos2d-x Schedule详解
查看>>
sdut 2163:Identifiers(第二届山东省省赛原题,水题)
查看>>
C++ 容器:顺序性容器、关联式容器和容器适配器
查看>>
mysql 常用语句集
查看>>
Atitit.软件开发提升稳定性总结
查看>>
lftp查看文件时间与登录服务查看文件时间相差8小时
查看>>
[leetcode]Next Permutation @ Python
查看>>
JAVA(2)——JDBC
查看>>
php heredoc 与 nowdoc
查看>>
DBA_Oracle DBA常用表汇总(概念)
查看>>
第30周二
查看>>
数学类杂志SCI2013-2014影响因子
查看>>
实用的树形菜单控件tree
查看>>
最近公共祖先(lca)
查看>>
【WP 8.1开发】文件选取器的使用方法
查看>>
Java实现BASE64编解码
查看>>