Spring Security OAuth2整合JWT

引言


Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准(RFC 7519).该token被设计为紧凑且安全的,特别适用于分布式站点的单点登录(SSO)场景。JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源,也可以增加一些额外的其它业务逻辑所必须的声明信息,该token也可直接被用于认证,也可被加密。

JWT的三个特点


自包含:

包含有意义的信息,令牌里面是有信息的,拿到这个令牌之后直接解析令牌就可以知道里边的信息是什么,不需要再去存储里边读一个东西

密签:

密签是一种签名而不是加密,JWT是一种开放的标准,发出去的秘钥信息是按照标准方式生成的,所有人是可以看到里边的信息,所以不要把敏感的信息放进去

签名:

防止别人篡改,发出去的令牌,如果里边信息被改变了,你是可以知道的

加密:

里边的信息别人不能被破解

可扩展:

可以自定义放进去的东西
在这里插入图片描述
默认方式生成一个令牌,因为是用UUID的方式,最后得到一个没有意义的串,这种机制的特点是:依赖一个存储,一旦存储出现问题了,这个串就没有任何意义了
在这里插入图片描述

JWT组成


在这里插入图片描述

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX25hbWUiOiJhZG1pbiIsInNjb3BlIjpbImFsbCJdLCJleHAiOjE1MTY3MjY4MTMsImJsb2ciOiJodHRwczovL2xvbmdmZWl6aGVuZy5naXRodWIuaW8vIiwiYXV0aG9yaXRpZXMiOlsiUk9MRV9VU0VSIl0sImp0aSI6ImJmZmY0NjRjLTFiNTktNGZkNy1hNTE4LWU3YjY5MDFiNzU3YyIsImNsaWVudF9pZCI6Im1lcnJ5eW91In0.gp5t9nY9mGp5O2-yqdflc0nEAsTeCQG7VugA8q8XcF4

Header

Header 包含了一些元数据,至少会表明 token 类型以及 签名方法。

{
   
 "typ": "JWT",
 "alg": "HS256"
}

Claims (Payload)

Claims部分包含了一些跟这个 token有关的重要信息。

{
   
 "user_name": "admin",
 "scope": [
  "all"
 ],
 "exp": 1516726813,
 "blog": "https://longfeizheng.github.io/",
 "authorities": [
  "ROLE_USER"
 ],
 "jti": "bfff464c-1b59-4fd7-a518-e7b6901b757c",
 "client_id": "merryyou"
}

Signature

JWT标准遵照 JSON Web Signature (JWS) 标准来生成签名。签名主要用于验证 token是否有效,是否被篡改。

JWT流程示意图

在这里插入图片描述

Spring Security Oauth2 实现JWT

配置TokenStoreConfig用于存储Token

@Configuration
public class TokenStoreConfig {
   
    /**
     * redis连接工厂
     */
    @Autowired
    private RedisConnectionFactory redisConnectionFactory;

    /**
     * 用于存放token
     * @return
     */
    @Bean
    &#
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: Spring Security是一个基于Spring框架的安全框架,它提供了一系列的安全服务,包括身份认证、授权、攻击防护等。OAuth2是一种授权协议,它允许用户授权第三方应用访问他们的资源,而不需要将用户名和密码提供给第三方应用。JWT是一种轻量级的身份验证和授权机制,它使用JSON对象作为令牌,可以在客户端和服务器之间传递信息。 Spring Security OAuth2和JWT都是用于安全认证和授权的工具,但它们的实现方式不同。Spring Security OAuth2是基于OAuth2协议实现的,它提供了一系列的OAuth2相关的类和接口,可以方便地实现OAuth2的授权流程。而JWT则是一种轻量级的身份验证和授权机制,它使用JSON对象作为令牌,可以在客户端和服务器之间传递信息。 在实际应用中,可以根据具体的需求选择使用Spring Security OAuth2或JWT来实现安全认证和授权。如果需要实现OAuth2的授权流程,可以选择使用Spring Security OAuth2;如果只需要简单的身份验证和授权,可以选择使用JWT。 ### 回答2: Spring Security OAuth2 是一个基于 Spring SecurityOAuth2 插件,它支持客户端和服务器端的 OAuth2 协议,提供了丰富的授权和认证功能。Spring Security OAuth2 的主要作用是,用于处理 OAuth2 的认证和授权流程,在 OAuth2 的基础上实现了更加丰富的授权和认证策略,使得开发者可以更好地在其应用中使用 OAuth2,保证了应用的可靠性和安全性。 JWT(JSON Web Token)是一种特定的 JSON 格式,用于在发送方和接收方之间传输信息,并且可以可靠地验证该信息是否被篡改。JWT一般由三部分组成,分别为 header、payload 和 signature 三个部分。JWT 的主要作用是用于进行安全授权和身份认证,可以通过 JWT 验证和解析信息、用户认证等操作。在 Web 应用中,JWT 被广泛应用于前后端分离的开发模式中,以及 API 的安全验证。 相较于 Spring Security OAuth2,JWT 更加灵活和简单,因为它不需要进行额外的认证和授权流程。JWT 的认证和授权流程可一步完成,因此适用于分布式系统等场景下的认证和授权。另外,JWT 可以自定义 payload 的内容,可以传输更为复杂和丰富的信息,因此在一些特定的应用场景中,JWT 更具优势。 综上所述,Spring Security OAuth2 适用于需要更强大的授权和认证流程的场景,而 JWT 更适合简单的认证和授权场景,也更加灵活和方便。在实际场景中,可以根据应用的实际需求选择使用合适的安全解决方案。 ### 回答3: Spring Security是一个基于Spring框架的安全框架,可以为Web应用程序提供身份验证、授权、防护和其他安全的处理。OAuth2是一种为Web应用程序提供授权访问的开放标准,用于客户端访问受保护的资源。JWT是一种简单的基于Web标准的和可移植的身份验证和授权方案,用于无状态身份验证。 Spring Security OAuth2和JWTSpring Security框架中用于身份验证和授权的两种解决方案。Spring Security OAuth2基于OAuth2标准,通过token的方式进行身份验证和授权,而JWT则是一种常见的token。 在Spring Security OAuth2中,客户端通过OAuth2服务机构获取访问资源的token。而在JWT中,token是由服务端生成的,包含了用户的身份信息和其他相关信息。在使用Spring Security OAuth2时,需要通过OAuth2服务机构来获取token,而在使用JWT时,可以通过服务端直接生成token,具有更高的效率。 Spring Security OAuth2和JWT都能够为Web应用程序提供身份验证和授权功能,但Spring Security OAuth2较为复杂,需要先配置服务机构才能使用,而JWT则较为简单,可以直接在服务端生成token。因此,选择何种方案需要根据实际情况进行权衡。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值