前面基本介绍了security的常规用法,同时介绍了JWT和它的一个简单实现,基本上开发中遇到的登陆问题都能解决了,即便在分布式开发,或者微服务开发中实现登陆也基本没有问题了。security自己已经实现的比较完善的安全处理,加上JWT的验证方式,能够实现一个理想的登陆功能。html
咱们来看登陆,给用户一个帐号,验证有效后登陆成功,这一步是任何系统都没法避免的。不管这个帐号只能登陆一个系统仍是像支付宝帐号同样登陆多个app,不管帐号是用户名密码,仍是手机验证码,或者邮箱等其余形式,能够说认证这一步是最基础的,没法避免。git
登陆成功后,经过受权可让用户访问一些登陆前没法访问的页面或者接口,并且不管session或者token,其实都是有有效期的,过了有效期就须要从新登陆。从这种形式上看,受权包含了更多的场景,不只是内部已经登陆的用户,还有多是第三方的应用,或者两个系统之间的信息交换等等。并且微服务的开发模式下,服务愈来愈多,能够被受权的内容也愈来愈多,若是没有统一的方式来管理这些接口资源的受权,会很是麻烦。所以,系统针对全部的访问须要有统一的认证和受权的机制,而 OAuth2.0 是咱们实现这种统一认证受权很是好的一个选择。github
OAuth 2.0 是目前最流行的受权机制,用来受权第三方应用,获取用户数据。最经典的场景就是咱们使用QQ来进行第三方登陆的时候,选择能够访问用户的哪些信息。关于OAuth 2.0的介绍,推荐读取阮一峰的三篇介绍文章,地址是:spring
这三篇文章是一个很是好和很是详细的OAuth2.0的入门。安全
关于OAuth2.0的理解,用来受权第三方应用,之前老是理解不到位的缘由是,我没有站在不一样的角度去分析思考。好比在使用QQ进行第三方登陆时,是咱们登陆的软件须要获取咱们qq帐号的部分用户信息,所以须要腾讯的认证受权,咱们须要在一键登陆(受权)的时候,登陆QQ,点击赞成便可。springboot
而若是咱们做为开发人员,去设计一个OAuth2.0受权功能的时候,须要从开发人员角度去思考哪部分是咱们要完成的功能,好比上面的QQ第三方登陆,首先QQ软件是咱们开发人员开发的,第三方应用有一个咱们软件的QQ帐号,第三方用户想在本身的软件上面展现第三方的QQ帐号的部分用户信息,须要来咱们的受权服务申请,赞成后才能查询咱们开发的软件中的用户信息,所以咱们要开发的是一个基本的QQ服务(资源服务),一个受权服务,而且第三方能够在我方注册帐号,或者能够给第三方分配帐号。服务器
关于第三方应用,能够是其它公司的系统,也能够本公司架构内的其它服务,你们能够根据阮一峰的文章,参考开发人员的任务属于文章中的哪些内容。这样,对开发OAuth2.0和使用OAuth2.0会有清晰的区分和理解。微信
单点登陆(SingleSignOn,SSO),就是经过用户的一次性鉴别登陆。当用户在身份认证服务器上登陆一次之后,便可得到访问单点登陆系统中其余关联系统和应用软件的权限,同时这种实现是不须要管理员对用户的登陆状态或其余信息进行修改的,这意味着在多个应用系统中,用户只需一次登陆就能够访问全部相互信任的应用系统。这种方式减小了由登陆产生的时间消耗,辅助了用户管理,是目前比较流行的。session
当用户第一次访问应用系统A的时候,由于尚未登陆,会被引导到认证系统中进行登陆;根据用户提供的登陆信息,认证系统进行身份校验,若是经过校验,应该返回给用户一个认证的凭据--ticket;用户再访问别的应用的时候就会将这个ticket带上,做为本身认证的凭据,应用系统接受到请求以后会把ticket送到认证系统进行校验,检查ticket的合法性。若是经过校验,用户就能够在不用再次登陆的状况下访问应用系统B和应用系统C了。架构
从上面的介绍能够看得出,单点登陆须要的正是一个共享的受权和验证系统,也就是说SSO是可使用OAuth2.0机制去设计实现的。可是SSO和OAuth2.0也有一点区别,sso和oauth2.0在应用场景上的区别在于,使用sso的各个系统(子模块)之间是互相信任的,一般是一个厂家的各个软件产品,或者是一个产品的不一样模块系统。使用oauth2.0的各个应用大部分之间是互相不信任的,一般是不一样厂家之间的帐号共享。OAuth2.0 解决的是服务提供方(微信等)给第三方应用受权的问题,而SSO解决的是大型系统中各个子系统如何共享登录状态的问题(好比你登陆了百度首页,那么你进入百度百科,百度贴吧,百度音乐等服务的时候都不须要从新登陆)。
Spring Cloud Security组件能够理解为,springboot security加上OAuth2.0的整合,能够实现微服务系统中sso单点登陆功能,和第三方受权功能,是一个强大的权限组件。关于springboot2.1.x版本对应使用的springcloud的security组件的官方文档以下:
文档的目录以下:
从目录上看,Spring Cloud Security组件主要的功能也是sso和资源认证受权,后面的内容主要用来学习Spring Cloud Security。