如何正确公开CAS生成的JWT票证的公共签名密钥 更新:

如何正确公开CAS生成的JWT票证的公共签名密钥 更新:,jwt,rsa,cas,Jwt,Rsa,Cas,经过进一步测试,我认为RSA设置似乎可以正常工作,但实际上却不能。在CAS能够支持JWT票据的非对称密钥之前,这个问题就变得无关紧要了 我的用例: CAS版本:6.2.0-RC2 对许多应用程序使用CAS进行单点登录。后端标识提供程序是LDAP。感兴趣的客户端是一个SPA,它重定向到CAS进行登录。成功登录CAS后,将通过配置的服务提供商发出JWT。我已设置服务提供商通过RSA使用非对称密钥签署JWT。这一切都在起作用。我无法工作的是“jwtTicketSigningPublicKey”执行器端

经过进一步测试,我认为RSA设置似乎可以正常工作,但实际上却不能。在CAS能够支持JWT票据的非对称密钥之前,这个问题就变得无关紧要了

我的用例: CAS版本:6.2.0-RC2

对许多应用程序使用CAS进行单点登录。后端标识提供程序是LDAP。感兴趣的客户端是一个SPA,它重定向到CAS进行登录。成功登录CAS后,将通过配置的服务提供商发出JWT。我已设置服务提供商通过RSA使用非对称密钥签署JWT。这一切都在起作用。我无法工作的是“jwtTicketSigningPublicKey”执行器端点

我希望能够发布公钥,以便我的SPA能够动态获取用于标牌验证的公钥,以便在必要时可以旋转RSA密钥,而无需在SPA端进行任何更改。我以为这就是这个特性的目的,但是当我按照指示暴露它之后点击端点时,我得到了一个404

我的配置: 以下是我的cas.config文件与此端点相关时的外观:

# Expose it
management.endpoints.web.exposure.include=jwtTicketSigningPublicKey
# Enable it
management.endpoint.jwtTicketSigningPublicKey.enabled=true
# Allow access to it
cas.monitor.endpoints.endpoint.jwtTicketSigningPublicKey.access=ANONYMOUS
然后我弹起CAS服务器,我可以在执行器链接中看到端点,如下所示:

正如文档所述,我可以传递一个可选的服务参数,如so,以获取与“每个服务”实现关联的公钥,这就是我所拥有的。我这样击中端点:

http://mycas.com/cas/actuator/jwtTicketSigningPublicKey?service=http://example.org
在这一点上,我收到了404。如果在没有服务参数的情况下命中端点,我也会得到404。但我希望如此,因为我实际上没有一个全局定义的RSA对

我的解决方案尝试: 我可以想象,应该在服务配置中提供该公钥的最合理的位置,以及我提供私钥的位置。但是,我找不到用于定义公钥的文档化参数。这是我一直试图做的,但没有用

{
  "@class" : "org.apereo.cas.services.RegexRegisteredService",
  "serviceId" : "^http://.*",
  "name" : "Sample",
  "id" : 10,
  "properties" : {
    "@class" : "java.util.HashMap",
    "jwtAsServiceTicket" : {
      "@class" : "org.apereo.cas.services.DefaultRegisteredServiceProperty",
      "values" : [ "java.util.HashSet", [ "true" ] ]
    },
    "jwtSigningSecretAlg" : {
      "@class" : "org.apereo.cas.services.DefaultRegisteredServiceProperty",
      "values" : [ "java.util.HashSet", [ "RS256" ] ]
    },
    "jwtAsServiceTicketSigningKey" : {
      "@class" : "org.apereo.cas.services.DefaultRegisteredServiceProperty",
      "values" : [ "java.util.HashSet", [ "MyPrivateKeyGoesHere" ] ]
    },
    "jwtAsServiceTicketSigningPublicKey" : {
      "@class" : "org.apereo.cas.services.DefaultRegisteredServiceProperty",
      "values" : [ "java.util.HashSet", [ "MyPublicKeyGoesHere" ] ]
    }
  }
}
签名密钥起作用,是一个有效的密钥。此外,还记录了签名秘密算法。但最后一个“…SigningPublicKey”参数完全是瞎猜,因为除了定义的内容之外,我还没有找到关于这个问题的任何文档

总结: 因此,我希望通过这个问题找到熟悉此端点的人,以及如何正确配置它,以便使签名公钥可用于我的SPA

{
  "@class" : "org.apereo.cas.services.RegexRegisteredService",
  "serviceId" : "^http://.*",
  "name" : "Sample",
  "id" : 10,
  "properties" : {
    "@class" : "java.util.HashMap",
    "jwtAsServiceTicket" : {
      "@class" : "org.apereo.cas.services.DefaultRegisteredServiceProperty",
      "values" : [ "java.util.HashSet", [ "true" ] ]
    },
    "jwtSigningSecretAlg" : {
      "@class" : "org.apereo.cas.services.DefaultRegisteredServiceProperty",
      "values" : [ "java.util.HashSet", [ "RS256" ] ]
    },
    "jwtAsServiceTicketSigningKey" : {
      "@class" : "org.apereo.cas.services.DefaultRegisteredServiceProperty",
      "values" : [ "java.util.HashSet", [ "MyPrivateKeyGoesHere" ] ]
    },
    "jwtAsServiceTicketSigningPublicKey" : {
      "@class" : "org.apereo.cas.services.DefaultRegisteredServiceProperty",
      "values" : [ "java.util.HashSet", [ "MyPublicKeyGoesHere" ] ]
    }
  }
}