为什么春天';的默认OAuth JWT实现是否公开JWT验证器?

为什么春天';的默认OAuth JWT实现是否公开JWT验证器?,jwt,public-key-encryption,spring-security-oauth2,hmac,Jwt,Public Key Encryption,Spring Security Oauth2,Hmac,Spring的默认流(使用客户端\u凭证授权)如下所示: 启动身份验证服务器(如所示) 启动资源服务器(RS) 启动时,RS通过使用基本身份验证调用GET/oauth/token\u key请求令牌密钥 AS使用RS256(SHA256withRSA)返回公钥 一段时间后,客户机通过使用客户机凭证授权调用GET/oauth/token请求accessToken AS返回一个包含 客户端将JWT作为承载令牌发送到RS RS使用启动时从AS接收的令牌密钥来验证JWT accessToken是否来

Spring的默认流(使用客户端\u凭证授权)如下所示:

  • 启动身份验证服务器(如所示)
  • 启动资源服务器(RS)
    • 启动时,RS通过使用基本身份验证调用
      GET/oauth/token\u key
      请求令牌密钥
  • AS使用RS256(SHA256withRSA)返回公钥
  • 一段时间后,客户机通过使用客户机凭证授权调用
    GET/oauth/token
    请求accessToken
  • AS返回一个包含
  • 客户端将JWT作为承载令牌发送到RS
  • RS使用启动时从AS接收的令牌密钥来验证JWT accessToken是否来自AS。这就是我困惑的地方
  • 这安全吗?为什么要使用公共证书而不是共享密钥?难道黑客不能轻松获得公钥并签署自己的有效JWT accessToken吗?公钥证书和JWT签名的使用如何协同工作,以验证发送者实际上是身份验证服务器而不是攻击者


    任何见解都会有所帮助。

    对公钥加密和数字签名本质的一些研究收集了以下信息:

    数字签名实现了非对称加密。数字签名使接收者有理由相信消息是由声称的发送者发送的。类似于手写签名,它们很难伪造。签名者(在本例中为AS)使用秘密私钥创建签名。一些不可否认方案为数字签名提供时间戳,因此即使私钥公开,签名也有效

    数字签名方案通常由3种算法组成

    1) 一种
    密钥生成算法
    ,从一组可能的私钥中均匀随机地选择私钥。该算法输出私钥和相应的公钥

    2) 使用消息和私钥创建签名的
    签名算法

    3) 一种
    签名验证算法
    ,在给定消息、公钥和签名的情况下,该算法接受或拒绝消息的真实性声明


    在本例(RS256)中,签名是使用SHA256withRSA创建的,该签名未用作加密算法,而是用于验证数据的来源或真实性。签名是使用私钥生成的。公钥被传递到资源服务器,用于验证签名。在这种情况下,即使攻击者拥有公钥,他们也无法创建带有签名的欺骗消息或更改内容

    对公钥密码和数字签名的性质的一些研究收集了以下信息:

    数字签名实现了非对称加密。数字签名使接收者有理由相信消息是由声称的发送者发送的。类似于手写签名,它们很难伪造。签名者(在本例中为AS)使用秘密私钥创建签名。一些不可否认方案为数字签名提供时间戳,因此即使私钥公开,签名也有效

    数字签名方案通常由3种算法组成

    1) 一种
    密钥生成算法
    ,从一组可能的私钥中均匀随机地选择私钥。该算法输出私钥和相应的公钥

    2) 使用消息和私钥创建签名的
    签名算法

    3) 一种
    签名验证算法
    ,在给定消息、公钥和签名的情况下,该算法接受或拒绝消息的真实性声明

    在本例(RS256)中,签名是使用SHA256withRSA创建的,该签名未用作加密算法,而是用于验证数据的来源或真实性。签名是使用私钥生成的。公钥被传递到资源服务器,用于验证签名。在这种情况下,即使攻击者拥有公钥,他们也无法创建带有签名的欺骗消息或更改内容