【发布时间】: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 需要
- response_type 参数必须包含 id_token。
- 请求中必须包含
nonce参数才能在请求中设置。
AuthorizationCodeResourceDetails 不支持此类参数。鉴于 OIDC 是一个通用标准,
Q-2。我不明白为什么每个提供商仍然有不同的要求?它不是违背 OIDC 的目的吗?事实上,我读到如果你通过
nonce,谷歌会抛出错误
Q-3。是否有任何 Spring 原生方式来配置这些额外的提供程序特定参数,如
nonce、promt、额外的response-type,最好有示例?
【问题讨论】:
标签: oauth-2.0 azure-active-directory spring-security-oauth2 openid-connect okta