仅做学习使用,老鸟飞过,欢迎交流前言在之前的微服务授权方案《SpringCloud+Security+Oauth2实现微服务授权-授权服务配置》中我们使用的是Oauth+JWT方式完成,今天介绍一下使用非对称加密方式RSA来生成JWT令牌一.对称和非对称加密1.对称加密早期的加密方式都是使用对称加密即:采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,也称为单密钥加密。加密算法是公开的,使用一个秘钥加密,必须使用相同的秘钥才能解密,通过秘钥来保证数据的安全传输。这种加密方式的问题在于加密方必须把秘钥传输给解密方,所以秘钥的保持和传输是一个头疼的问题,
Session不共享问题对于登录而言,通常情况下我们喜欢把登录信息存储到服务器的Session中,这种存储方式在单体应用中没有问题,但是在分布式/集群环境中会存在Session丢失问题,如下图:解决方案也有很多,在《微服务认证授权方案》一文中有相关的解决方案分析,这里不在重复赘述,本文章的目的是使用SpringSession+Redis来解决分布式系统中的单点登问题SpringSession的认证方案这种认证方案还是使用的是session,只不过是将Session统一存储到Redis中实现session共享,各个服务可以从Redis中获取Session得到认证信息,然后做身份检查,权限校验等工
前言这一章节我们考虑对接一下前端页面的登录,我这里采用的是比较经典的架构“前后端分离”,前端是VUE+ElementUI实现1.前端登录1.1.方案分析后端没什么说的,跟之前文章中一样,你需要搭建独立的认证中心,其他的微服务做为资源服务即可,对于前台登录首先少不了账号密码登录模式,所以我们的方案可以这样,前台直接封装请求向认证中心获取Token可以使用“password”模式,然后把Token存储到SessionStorage中,请求资源的时候给Header添加上Token即可.1.2.前端获取Token使用“password”模式请求Token,如下:varparam="usern
前言根据之前文章的学习,我们已经可以实现微服务的授权了,目前我们采用的方案是在每个资源服务器校验Token然后完成资源的授权,业界还有一种比较常用的方案就是在网关层统一校验Token,下面我们来探讨一下1.统一鉴权方案在“微服务授权方案”中我们就已经探讨了,在微服务中有两种授权方案,一者是不使用网关,即鉴权工作交给资源服务器,二者是使用网关统一鉴权,如果不使用网关那么我们就只需要在每个资源服务做同样的资源服务配置即可,如果要使用网关,那么就需要把资源服务的配置搬到网关中实现统一鉴权(网关充当了资源服务器实现鉴权功能)。这样就避免了资源服务重复的鉴权工作。当网关实现了统一鉴权那么我们的下游资源服
前言Oauth2的授权流程是客户端向认证服务器提交认证获取Token,认证服务器颁发JWT格式的Token客户端进行Token的存储,接着客户端带着Token请求资源服务器,资源服务器校验Token并对资源授权,授权成功返回资源有这么一种情况,就是客户端的请求可能需要多个资源服务器共同完成,即:一个请求过来到达资源服务器A,资源服务器A需要调用资源服务器B才能完成请求,如果资源服务器B也需要做授权,那我们的请求可能会失败,因为我们的Token通过请求到达了资源服务器A,默认情况下资源服务A调用资源服务器B并不能把Token转发过去,所以资源服务器B可能会授权失败,所以我们要做服务之间的授权1.
前言Oauth2分为授权服务和资源服务,上一章节我们对AuthServer做了Oauth2的授权服务配置,这一章节我们来配置资源服务器Resource1Server1.概述Oauth2资源服务配置资源服务器也需要导入oauth2的依赖<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-oauth2</artifactId></dependency>当客户端(web端,mobile移动端)带着Toke
1.概述1.1.SpringSecurity-Oauth2介绍SpingSecurityOauth2实现了Oatuh2,SpingSecurityOauth2分为两个大块,一者为认证授权(AuthorizationServer)服务和资源服务(Resourceserver),认证授权服务一般负责执行认证逻辑(登录)和加载用户的权限(给用户授权),以及认证成功后的令牌颁发,而资源服务器一般指的是我们系统中的微服务(被访问的微服务),在资源服务器需要对用户的令牌(认证成功与否),以及授权(是不是有访问权限)做检查。1.2.微服务Oauth2认证解决方案这里我们需要准备四个服务,1.授权服务2.资源
前言上一文章我们准备了微服务授权的环境,并对AuthServer实现了简单的认证流程,这里是接上一篇文章继续对AuthServer认证服务做Oauth2配置1.概述Oauth2授权服务配置我们只需要导入如下依赖即可集成JWT和Oauth2了<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-oauth2</artifactId></dependency>Oauth2提供了AuthorizationS
前言我们的授权方案是SpringCloud+Security+Oauth2+JWT为了方便后面做认证授权先来普及两个概念Oauth2和JWTOauth2部分1.Oauth2概述OAUTH协议为用户资源的授权提供了一个安全的、开放而又简易的标准。与以往的授权方式不同之处是OAUTH的授权不会使第三方触及到用户的帐号信息(如用户名与密码),即第三方无需使用用户的用户名与密码就可以申请获得该用户资源的授权,因此OAUTH是安全的,oAuth是OpenAuthorization的简写,目前的版本是2.0版。2.Oauth2的授权流程为了方便理解,这里以Oauth2授权码模式为例分析一下Oauth2的授
自定义登录在SpringSecurity的整个认证流程中,除了UserDetailsService需要我们自己定义外,其他的的组件都可以使用默认的,因为UserDetailsService是SpringSecurity获取数据库中的认证信息的媒介,而如何才能从数据库中获取认证信息只有我们才知道。在入门案例中我们使用的是InMemoryUserDetailsManager基于内存的UserDetailsService方案,接下来我们需要把基于内存的方案修改为基于数据库的方案。1.定义密码编码器在我们的案例中,密码一值是明文的,我们指定的密码编码器是NoOpPasswordEncoder,这个是不
系列文章目录一.SpringSecurity基础-认证和授权概述二.SpringSecurity基础-简单登录实现三.SpringSecurity基础-认证原理&改造登录流程四.SpringSecurity基础-授权流程五.SpringSecurity基础-认证授权结果处理六.SpringSecurity基础-记住我功能实现前言前面我们讨论的是SpringSecurity基础部分内容,接下来我们来探讨一下SpringCloud集成SpringSecurity和Oauth实现微服务认证授权方案微服务(分布式)项目常见认证方案1.微服务授权面临哪些问题在微服务架构下有很多的服务,每个微应用
1.理解记住我1.1.什么是记住我Rememberme(记住我)记住我,当用户发起登录勾选了记住我,在一定的时间内再次访问该网站会默认登录成功,即使浏览器退出重新打开也是如此,这个功能需要借助浏览器的cookie实现,具体流程如下1.2.记住我核心流程在SpringSecurity中提供RememberMeAuthenticationFilter过滤器来实现记住我功能,其核心流程如下:认证成功UsernamePasswordAuthenticationFilter会调用RememberMeServices创建Token(见其父类AbstractAuthenticationProcessingF
1.认证结果处理1.1.认证成功处理在传统的应用中,认证成功后页面需要跳转到认证成功页面或者跳转到个人中心页,但是在前后端分离的项目通常是使用Ajax请求完成认证,这时候我们需要返回一个JSON结果告知前端认证结果,然后前端自行跳转页面。要做到上述功能,我们需要自定义认证成功处理器实现AuthenticationSuccessHandler接口复写onAuthenticationSuccess方法,该方法其中一个参数是Authentication,他里面封装了认证信息,用户信息UserDetails等,我们需要在这个方法中使用Response写出json数据即可1.导入JSON依赖<de
1.授权流程分析授权一定是在认证通过之后,授权流程是通过FilterSecurityInterceptor拦截器来完成,FilterSecurityInterceptor通过调用SecurityMetadataSource来获取当前访问的资源所需要的权限,然后通过调用AccessDecisionManager投票决定当前用户是否有权限访问当前资源。授权流程如下当客户端向某个资源发起请求,请求到达FilterSecurityInterceptor,然后会调用其父类AbstractSecurityInterceptor的beforeInvocation方法做授权之前的准备工作在beforeInvo
1.认证流程原理1.1.认证流程SpringSecurity是基于Filter实现认证和授权,底层通过FilterChainProxy代理去调用各种Filter(Filter链),Filter通过调用AuthenticationManager完成认证,通过调用AccessDecisionManager完成授权,SpringSecurity中核心的过滤器链详细如下:SecurityContextPersistenceFilterFilter的入口和出口,它是用来将SecurityContext(认证的上下文,里面有登录成功后的认证授权信息)对象持久到Session的Filter,同时会把Secu
1.SpringSecurity介绍SpringSecurity是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架。它提供了一组可以在Spring应用上下文中配置的Bean,充分利用了SpringIoC,DI(控制反转InversionofControl,DI:DependencyInjection依赖注入)和AOP(面向切面编程)功能,为应用系统提供声明式的安全访问控制功能,减少了为企业系统安全控制编写大量重复代码的工作。2.SpringSecurity入门1.搭建工程基于SpringBoot搭建web工程,项目名为“spring-security-demo
1.认证授权概述为了给学习SpringSecurity打下基础,我们来回顾一下传统的认证授权流程1.1.什么是认证认证是对主体/用户身份的确认,在我们的生活中随处可见认证场景,如:小区门禁卡,人脸识别,指纹识别等都是对用户身份的确认,在传统的应用中我们通常使用用户名/用户ID和密码来进行用户的身份确认,即登录,但登录的方式不仅限制于用户名/密码的方式,认证是我们应用的第一道安全门,所以对于整个系统的安全来说显得极其重要。1.2.什么是授权控制不同的用户访问不同的权限,用户认证成功后,就可以对某些资源进行访问,但是不同的用户有不同的资源访问权利,那么对用户的授权也都不一样。如:公司老板拥有对公司