OAuth2.0的概念
OAuth 2.0开放授权,OAuth 2.0 是一种授权框架,用于授权第三方应用程序访问用户资源,而无需共享用户的凭据。它为用户提供了更好的隐私和安全性,并允许用户对授权进行细粒度的控制,颁发的token是第三方应用程序颁发的token,当然如果是第一方的服务,都是由第一放颁发token,可以采用密码模式
OAuth2.0的四种角色
- 资源所有者 (Resource Owner):可以指拥有资源的用户
- 客户端 (Client):可以理解为第三方系统/软件
- 授权服务器 (Authorization Server):权限校验和授权系统(认证服务中心)
- 资源服务器 (Resource Server):受保护的资源,用户在系统上所具有的资源/或者能够访问的资源
OAuth 2.0 通过授权服务器颁发访问令牌 (Access Token),该令牌用于访问受保护的资源服务器上的资源
OAuth2.0的四种授权模式
授权码模式
授权服务器将授权码(AuthorizationCode)转经浏览器发送给client,客户端拿着授权码向授权服务器索要访问access_token,这种模式是四种模式中最安全的一种模式。一般用于Web服务器端应用或第三方的原生App调用资源服务的时候
密码模式
资源拥有者将用户名、密码发送给客户端,客户端拿着资源拥有者的用户名、密码向授权服务器请求令牌(access_token),密码模式使用较多,适应于第一方的单页面应用以及第一方的原生App
客户端模式
客户端向授权服务器发送自己的身份信息,并请求令牌(access_token),确认客户端身份无误后,将令牌(access_token)发送给client,这种模式是最方便但最不安全的模式。因此这就要求我们对client完全的信任,而client本身也是安全的。因此这种模式一般用来提供给我们完全信任的服务器端服务
简化模式
资源拥有者打开客户端,客户端要求资源拥有者给予授权,它将浏览器被重定向到授权服务器,授权服务器将授权码将令牌(access_token)以Hash的形式存放在重定向uri的fargment中发送给浏览器
更详细的介绍请移步:OAuth2.0四种授权模式
JWT(JSon Web Token)
JWT 是一种基于 JSON 的开放标准 (RFC 7519),用于在各方之间安全地传输信息。JWT 包含了经过数字签名或加密的 JSON 对象,可以安全地在各个系统之间传递。JWT 的格式由三部分组成:头部 (Header)、载荷 (Payload) 和签名 (Signature)。它可以用于验证和确定发送方的身份以及传输的数据是否被篡改
spring security
Spring Security 是一个用于在 Java 应用程序中处理身份验证和授权的强大框架。它提供了一套全面的安全特性,用于保护应用程序免受各种安全威胁,并支持各种身份验证和授权机制。Spring Security 可以与 OAuth 2.0 和 JWT 等技术集成,以实现更加灵活和安全的身份验证和授权流程。