【问题标题】:Spring native support for OIDC workflowSpring 对 OIDC 工作流的原生支持
【发布时间】:2020-02-11 15:04:22
【问题描述】:

我正在尝试为我的 spring-java-web 应用程序启用 OIDC authN 和 authZ 工作流。理想情况下,我想以与 IDP 无关的方式进行操作。即此应用程序只能与部署管理员的 Azure AD、OKTA、AWS SSO、Google-auth 中的任何一个集成。我希望将用户重定向到任何提供商该应用程序已集成。

以 OIDC 作为标准,我的理解是我应该能够编写一个 OIDC 身份验证处理过滤器,该过滤器应该可以与任何提供商一起使用。每个提供者不同的必要配置(auth url、client id、secret、JWKS url 以获取提供者密钥等)将作为参数传递给此过滤器/休息模板。

  • Q.1 是否可以实施与提供商无关的 OIDC 过滤器?有人可以指点一下吗?

我知道 Spring 本身提供 Oauth2 库/api,例如 AuthorizationCodeResourceDetails、OAuth2ClientAuthenticationProcessingFilter 。但是我没有看到任何内置的 OIDC 本机处理过滤器。有吗?

我尝试并理解了https://www.baeldung.com/spring-security-openid-connect 中给出的工作流程。但是,当我尝试调整此代码以使其与 Azure AD 一起工作时,它失败了。那是因为 Azure AD 需要

  1. response_type 参数必须包含 id_token。
  2. 请求中必须包含nonce 参数才能在请求中设置。

AuthorizationCodeResourceDetails 不支持此类参数。鉴于 OIDC 是一个通用标准,

  • Q-2。我不明白为什么每个提供商仍然有不同的要求?它不是违背 OIDC 的目的吗?事实上,我读到如果你通过nonce

  • ,谷歌会抛出错误
  • Q-3。是否有任何 Spring 原生方式来配置这些额外的提供程序特定参数,如 noncepromt、额外的 response-type,最好有示例?

【问题讨论】:

    标签: oauth-2.0 azure-active-directory spring-security-oauth2 openid-connect okta


    【解决方案1】:

    我认为 Spring Security OIDC 的问题在于您使用的是旧版 OAuth 库(至少那是 baeldung 文章所说明的)。 OAuth2 和 OIDC 现在是 Spring Security 5.x 的一部分,而不是单独的项目。此示例中有一个 OIDC 客户端“login-client”:https://github.com/jgrandja/oauth2-protocol-patterns 可能显示不同。是的,OIDC 应该允许您进出交换提供程序,尽管并非所有 OIDC 提供程序都会实现所有功能(例如发现等)

    【讨论】:

    • 感谢@sdoxsee .OAuth2LoginAuthenticationFilter 和 OAuth2AuthorizationRequestRedirectFilter 正在协同工作以处理基于registrationId的重定向。但是当用户单击链接时,此ID被显式传递。就我而言。如果应用程序与 Google 集成。我希望用户隐式重定向到 google 进行身份验证,而不是要求他们点击链接。在 baeldung 文章中,这是使用与“LoginUrlAuthenticationEntryPoint”相同的 url、过滤器处理 url 和重定向 url 以及 OAuth2ClientContextFilter 来实现的。我如何在 Spring 5 中做到这一点?
    猜你喜欢
    • 2020-11-29
    • 1970-01-01
    • 2018-09-29
    • 2016-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多