Spring Security OAuth2+JWT开发实践
如今我们的生活已经进入信息化时代,习惯于将工作、学习贺生活都融入各种各样的web和移动端应用中。这些应用在给我们带来生活便利的同时,我们也不禁担心,与我们自身相关的数据是否处于安全包含之下。
这也是各类公司的技术团队需要考虑的问题,数据安全问题成为这些技术团队必须放在首位的非功能要求。
同时,随着软件环境和需求的变化,软件的架构由单体结构演变为分布式架构,如当前流行的微服务架构。
对微服务架构而言,安全性设计的核心还是认证和授权。但是因为微服务系统中服务之间可以存在相互的调用关系,针对每一个服务,一方面需要考虑来自客户端的请求,另一方面需要考虑来自另一个服务的请求,安全访问控制面临着从客户端到服务、从服务到服务的多种授权场景。
基于上述安全性开发需求,需要引入专门用于分布式环境的认证授权体系,而OAuth2 协议和JWT(Json web token)令牌是应对这种应用场景的有效解决方案。
专栏大纲
Spring Security 是一个功能强大且高度可定制的身份验证和访问控制框架。它是基于 Spring 和 Spring Boot、Spring Cloud 应用程序安全的实现标准。
Spring Security 是一个专注于为 Java 应用程序提供身份验证和授权的框架。与所有 Spring 项目一样,Spring Security 的真正强大之处在于它可以轻松扩展以满足自定义需求。
OAuth2 是一种安全的授权框架,提供了一套详细的授权机制。用户或应用可以通过公开的或私有的设置,授权第三方应用访问特定资源。它详细描述了系统中不同角色、用户、服务应用(比如API),以及客户端(比如网站或移动App)之间怎么实现相互认证。
OAuth2定义了一组相对复杂的规范,涉及到:Roles角色、Client Types客户端类型、Client Profile客户端描述、Authorization Grants认证授权、Endpoints终端等。
如今,OAuth 2.0已经是互联网上首选的授权协议。它被广泛使用,从大型互联网公司到小型创业公司,几乎所有的地方都在使用它。
越来越多的开发者开始学习并在实际项目中运用JWT(Json Web Token)技术来保护应用安全,很多公司的应用程序也开始使用JWT来管理用户会话信息。
JWT 提供了一种用于发布接入令牌(Access Token),并对发布的签名接入令牌进行验证的方法。 令牌(Token)本身包含了一系列声明,应用程序可以根据这些声明限制用户对资源的访问。
JWT是一种安全标准,基本思路就是用户提供用户名和密码给认证服务器,服务器验证用户提交信息信息的合法性;如果验证成功,会产生并返回一个Token(令牌),用户可以使用这个Token访问服务器上受保护的资源。
本专栏采取了循序渐进和开发实践相结合的编写方式,目标是帮助读者理解Spring Security、OAuth2和JWT等基本概念和工作原理,基于Spring Security 和OAuth2,结合JWT令牌,以最佳的方式来构建分布式环境的认证授权体系。