【问题标题】:Spring Boot Oauth2 access token validation with pub key in certificateSpring Boot Oauth2 访问令牌验证与证书中的公钥
【发布时间】:2016-08-21 12:25:09
【问题描述】:

我们使用 Ping Federate 作为身份验证服务器,并计划在 Spring boot 之上构建微服务。这个想法是 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-----

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

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

【问题讨论】:

  • 我在搜索“pingfederate spring boot”时遇到了您的问题 :-) 您是否在此期间为自己找到了答案,或者问题是否仍然存在?您的 PingFederate 与基于 Spring Boot 的服务的集成进展如何?
  • 我们最终创建了一个扩展 Spring Boot oauth2 逻辑的安全库,以支持通过公钥验证 AccessToken。这些可以在接受 x5t 指纹作为参数的端点上可用(对于 Ping Identity)或存储在 JWKS 中(对于 IdentityServer)。一般来说,对于 x5t 方法,我们扩展了 JwtAccessTokenConverter 以支持多个 IDP,然后创建自己的资源服务器 Spring boot 自动配置以在启动期间对其进行初始化。如果您仍然感兴趣,我们可能会在 GitHub 上发布该库。
  • 确实非常感兴趣,仍然。提前谢谢了。顺便说一句,您是否通过 Spring Security oAuth2 项目提出了您的发现?似乎 PingFederate 不符合公钥检索端点,或者 Spring Security oAuth2 在此类端点上的期望应该更加灵活。你怎么看?
  • 好的,我已经将库推送到Github,您可以随意查看代码并随意重用。如果您只需要在您的服务中支持一个 IDP,那么属性 security.oauth2.resource.jwk.key-set-uri(我认为是在 2.2.0 中添加的)已经可以解决您的问题,因为 Ping Federate 已经添加了对 JWKS in 8.2 的支持
  • 不错。谢谢。将能够利用那个。我给它加星。 :-) 还有一个问题:您是否偶然有一些指向使用 PingFederate 的基于 Spring Boot/Spring Security oAuth2 的配置示例?我现在将开始这样做,我希望在那里找到一些示例应用程序,但没有太多运气。

标签: java oauth spring-boot


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-18
    • 2017-08-03
    • 2012-04-11
    • 2020-04-23
    • 2017-07-05
    • 2019-10-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多