SpringBootSecurity学习(14)前后端分离版之 OAuth2.0介绍

登录总结

前面基本介绍了security的常规用法,同时介绍了JWT和它的一个简单实现,基本上开发中遇到的登录问题都能解决了,即使在分布式开发,或者微服务开发中实现登录也基本没有问题了。security本身已经实现的比较完善的安全处理,加上JWT的验证方式,可以实现一个理想的登录功能。

我们来看登录,给用户一个账号,验证有效后登录成功,这一步是任何系统都无法避免的。无论这个账号只能登录一个系统还是像支付宝账号一样登录多个app,无论账号是用户名密码,还是手机验证码,或者邮箱等其他形式,可以说认证这一步是最基础的,无法避免。

登录成功后,通过授权可以让用户访问一些登录前无法访问的页面或者接口,而且无论session或者token,其实都是有有效期的,过了有效期就需要重新登录。从这种形式上看,授权包含了更多的场景,不仅是内部已经登录的用户,还有可能是第三方的应用,或者两个系统之间的信息交换等等。而且微服务的开发模式下,服务越来越多,可以被授权的内容也越来越多,如果没有统一的方式来管理这些接口资源的授权,会非常麻烦。因此,系统针对所有的访问需要有统一的认证和授权的机制,而 OAuth2.0 是我们实现这种统一认证授权非常好的一个选择。

OAuth2.0介绍

OAuth 2.0 是目前最流行的授权机制,用来授权第三方应用,获取用户数据。最经典的场景就是我们使用QQ来进行第三方登录的时候,选择可以访问用户的哪些信息。关于OAuth 2.0的介绍,推荐读取阮一峰的三篇介绍文章,地址是:

这三篇文章是一个非常好和非常详细的OAuth2.0的入门。

关于OAuth2.0的理解,用来授权第三方应用,以前总是理解不到位的原因是,我没有站在不同的角度去分析思考。比如在使用QQ进行第三方登录时,是我们登录的软件需要获取我们qq账号的部分用户信息,因此需要腾讯的认证授权,我们需要在一键登录(授权)的时候,登录QQ,点击同意即可。

而如果我们作为开发人员,去设计一个OAuth2.0授权功能的时候,需要从开发人员角度去思考哪部分是我们要完成的功能,比如上面的QQ第三方登录,首先QQ软件是我们开发人员开发的,第三方应用有一个我们软件的QQ账号,第三方用户想在自己的软件上面展示第三方的QQ账号的部分用户信息,需要来我们的授权服务申请,同意后才能查询我们开发的软件中的用户信息,因此我们要开发的是一个基本的QQ服务(资源服务),一个授权服务,并且第三方可以在我方注册账号,或者可以给第三方分配账号。

关于第三方应用,可以是其它公司的系统,也可以本公司架构内的其它服务,大家可以根据阮一峰的文章,参考开发人员的任务属于文章中的哪些内容。这样,对开发OAuth2.0和使用OAuth2.0会有清晰的区分和理解。

SSO单点登录

单点登录(SingleSignOn,SSO),就是通过用户的一次性鉴别登录。当用户在身份认证服务器上登录一次以后,即可获得访问单点登录系统中其他关联系统和应用软件的权限,同时这种实现是不需要管理员对用户的登录状态或其他信息进行修改的,这意味着在多个应用系统中,用户只需一次登录就可以访问所有相互信任的应用系统。这种方式减少了由登录产生的时间消耗,辅助了用户管理,是目前比较流行的。

当用户第一次访问应用系统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

Spring Cloud Security组件可以理解为,springboot security加上OAuth2.0的整合,可以实现微服务系统中sso单点登录功能,和第三方授权功能,是一个强大的权限组件。关于springboot2.1.x版本对应使用的springcloud的security组件的官方文档如下:

  • https://cloud.spring.io/spring-cloud-static/spring-cloud-security/2.1.4.RELEASE/single/spring-cloud-security.html

文档的目录如下:

file

从目录上看,Spring Cloud Security组件主要的功能也是sso和资源认证授权,后面的内容主要用来学习Spring Cloud Security。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 前后端分离是一种将前界面与后逻辑进行分离开发的架构方式,使得前与后可以并行开发。OAuth 2.0是一种授权框架,用于授权和认证流程的规范化,而Spring Security是一个在Java中实现安全控制的框架,提供了大量的安全特性。Spring Authorization Server是Spring Security中用于实现授权服务器的模块,它支持OAuth 2.0的各种授权模式。 密码模式是OAuth 2.0中的一种授权模式,它允许用户通过提交用户名和密码来获取访问令牌,然后使用该令牌来访问受保护的资源。在前后端分离的架构中,可以使用Spring Security配合Spring Authorization Server来实现密码模式的认证和授权。 在密码模式下,前首先需要收集用户的用户名和密码,并将其发送给后。后使用Spring Security提供的密码编码器对密码进行加密,并验证用户名和密码的正确性。如果验证通过,则后向客户颁发一个访问令牌,通常是一个JWT(JSON Web Token)。前使用获得的访问令牌来访问需要受保护的资源,每次请求将该令牌作为Authorization头的Bearer字段发送给后进行验证。后可以使用Spring Security的资源服务器来验证该令牌的有效性,并根据用户的权限控制对资源的访问。 使用Spring Security和Spring Authorization Server的密码模式可以实现安全的前后端分离架构。通过合理配置和使用安全特性,可以保障用户的身份认证和资源的授权,确保系统的安全性。 ### 回答2: 前后端分离是一种软件架构模式,前和后通过使用API进行通信,分别负责处理用户界面和数据逻辑。OAuth 2.0是一种用于授权的开放标准协议,它允许用户在第三方应用程序中授权访问其受保护的资源。Spring Security是Spring框架中的一个模块,提供了身份验证和授权功能。 在前后端分离的架构中,前应用程序通常需要使用OAuth 2.0协议进行用户授权,以访问后应用程序的受保护资源。为了实现密码模式,我们可以使用Spring Security的模块之一,即spring-authorization-server。 spring-authorization-server是Spring Security的一个子模块,用于实现OAuth 2.0协议中的授权服务器。密码模式是OAuth 2.0协议中的一种授权模式,允许前应用程序通过用户的用户名和密码进行授权。密码模式在安全性上有一定的风险,因此在实际应用中需要谨慎使用。 使用spring-authorization-server的密码模式,我们可以在前应用程序中收集用户的用户名和密码,并将其提交给后应用程序进行验证。后应用程序将使用Spring Security进行身份验证,并向前应用程序颁发一个访问令牌,该令牌可以用于后续的API请求。 通过使用前后端分离、OAuth 2.0和spring-authorization-server的密码模式,我们可以实现安全的用户授权和身份验证机制,确保只有经过授权的用户才能访问受保护的资源。这种架构模式能够提高系统的安全性和可扩展性,适用于各种类型的应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值