admin管理员组

文章数量:1575498

OAuth2:使用JWT和加密签名

  • 1、简介
  • 2、使用JWT以及对称密钥签名的令牌
    • 2.1 使用JWT
    • 2.2 实现授权服务器以颁发JWT
      • 2.2.1 项目依赖
      • 2.2.2 配置JwtTokenStore
      • 2.2.3 为授权服务器配置用户管理
      • 2.2.4 启动项目获取访问令牌
    • 2.3 实现使用JWT的资源服务器
      • 2.3.1 项目依赖
      • 2.3.2 添加测试端点
      • 2.3.3 资源服务器的配置类
      • 2.3.4 测试
  • 3、使用通过JWT和非对称密钥签名的令牌
    • 3.1 什么是非对称密钥对?
    • 3.2 生成密钥对
    • 3.3 实现使用私钥的授权服务器
      • 3.3.1 授权服务器和私钥的配置类
      • 3.3.2 生成令牌测试
    • 3.4 实现使用公钥的资源服务器
      • 3.4.1 资源服务器和公钥的配置类
      • 3.4.2 添加控制器
      • 3.4.3 测试资源服务器
    • 3.5 使用一个暴露公钥的端点
      • 3.5.1 用于暴露公钥的授权服务器的配置类
      • 3.5.2 测试
  • 4、将自定义信息添加到JWT
    • 4.1 配置授权服务器以便向令牌添加自定义详细信息
      • 4.1.1 自定义令牌增强器
      • 4.1.2 配置TokenEnhancer对象
    • 4.2 启动授权服务器,生成新的访问令牌
    • 4.3 增强的JWT的主体
    • 4.4 配置资源服务器以读取JWT的自定义详细信息
    • 4.5 创建一个自定义AccessTokenConverter
    • 4.6 定义新的AccessTokenConverter bean
    • 4.7 控制器类
    • 4.8 测试
  • 5、总结

1、简介

  使用加密签名验证令牌的优点是允许资源服务器验证令牌,而不需要直接调用授权服务器,也不需要共享数据库。这种令牌验证的方法通常用于使用OAuth2实现身份验证和授权的系统。

2、使用JWT以及对称密钥签名的令牌

  用于令牌签名的最简单的方法是使用对称密钥。在这种方法中,使用相同的密钥,既可以签署一个令牌,又可以验证它的签名。使用对称密钥的优点是更简单、速度更快。它也有缺点。不能总是与身份验证过程中涉及的所有应用程序共享用于签名令牌的密钥。

  现在我们创建两个项目,一个授权服务器,一个资源服务器。

2.1 使用JWT

  JWT是一个令牌实现。令牌由三部分组成:头信息、主体和签名。头信息和主体中的详情用JSON表示,并且它们是Base64编码的。第三部分是签名,这是一种加密算法生成的,该算法使用头信息和主体作为其输入。密码算法还意味着需要密钥。密钥就像一个密码。拥有真正密钥的所有者可以签署令牌或验证签名的真实性。如果令牌上的签名是真实的,就可以确保在签名之后没有人修改令牌。

2.2 实现授权服务器以颁发JWT

  这里将会实现一个授权服务器,该服务器会向客户端颁发JWT以进行授权。管理令牌的组件是TokenStore。这里要做的是使用Spri

本文标签: jwt