Spring Boot Oauth2使用证书中的pub密钥验证令牌验证

Dav*_*rig 6 java oauth spring-boot

我们使用Ping Federate作为身份验证服务器,并计划在Spring启动之上构建微服务.这个想法是Ping Federate将处理登录并向客户端应用程序提供访问令牌(JWT),然后客户端应用程序使用这些来访问REST服务.
要验证令牌,Ping Federate会通过URL公开包含公钥的证书.它只返回证书:

-----BEGIN CERTIFICATE-----
MIIDAjCCAeqgAwIBAgIGAVKHvf+JMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAkNBMRAwDgYD
VQQKEwdVbml0cm9uMSEwHwYDVQQDExhpbnQtc2lnbm9uLm15dW5pdHJvbi5jb20wHhcNMTYwMTI4
MTAxODQxWhcNMjEwNzIwMDkxODQxWjBCMQswCQYDVQQGEwJDQTEQMA4GA1UEChMHVW5pdHJvbjEh
MB8GA1UEAxMYaW50LXNpZ25vbi5teXVuaXRyb24uY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
MIIBCgKCAQEAk2PRFPfaQjjhVllok1Xq+Tybkg9Nv3XhSRjpq06iV8CzjJ8T8uwK//TLYM2Z7rqP
NDrMmzUhjwEM4WVAJf6stj7D2uQ01MU8sZTlQ3mygWm9qnJnijMyk0081oe429iabRGYfik2SvLd
Nqj53UUP858Qfk82LFjXdC2G2XkxB2ejwirsdQ/8ud6Sduom5NdIXNzMN3uucZ996wIdHwEhFBzV
eMSlY1LJAiKtwsTq6aP/A/GPBrEBa5Duiiz/z91KBNIlfiXEcxRjPgkJVgVpfVv0o7XBIoKnS4y8
uurlBlpT3fg6JLifBtkYe+Y8tV0DjFdE8LSMzpYOXdT4h069LwIDAQABMA0GCSqGSIb3DQEBBQUA
A4IBAQAaibNAZ7/fmdsoTg0vb4jqYFR1WrsqZ7M+7D0fMRNtBAziLBjzlsv2CuP+Zn3tvoon0QQO
/PzEIxTlWXv+F25ej2owK7J3ovyZyQBVNyjv8S/YZfSYkbKQo1DtbKhEAzQyBMiY611jbcbo2TDz
mvH436SipBgZqG0vK+ZzMcp4HVp2xAtwD567oj0AbP6VHkJUgWyiE7HOf+FSlq07jPuy/Hbw2/lJ
ZI1inmPVpuUCJ3pdfzfI2f4ETLzroQ588BnGnsLPIUH6W3r2JMAA1m5WbWc9w1VWJJelzHxlIdFg
yoEGcZn7wctVooeEzS/ghoelwFVXCKad30GnmtXdoXj+
-----END CERTIFICATE-----
Run Code Online (Sandbox Code Playgroud)

security.oauth.resource.jwt.key-uri属性设置为该端点时,自动配置ResourceServerTokenServicesConfiguration失败,因为它不仅需要简单的字符串,而且希望将其映射到映射中.在第二步中,JwtAccessTokenConverter它也会失败,因为它需要一个"普通"公钥而不是一个包含在证书中的公钥.

扩展spring security oauth组件以支持我的IDP的最佳方法是什么?我正在考虑覆盖一些配置,ResourceServerTokenServicesConfiguration但它看起来像我(JwtAccessTokenConverter)有趣的一个不支持覆盖.

Ber*_*rnd 0

我已经使用 PingFederate 8.6 (+)在https://github.com/berndgoetz/spring-boot-oauth2-pingfederate上为 Spring Boot 2 制作了一个演示应用程序。它基本上是实现最少必要的代码来覆盖默认的 Spring oAuth2 行为。我希望这可以帮助其他寻求将 PingFederate 与 Spring Security+oAuth2 结合使用的人