首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Okta的Security &自定义重定向==太多重定向

使用Okta的Security &自定义重定向==太多重定向
EN

Stack Overflow用户
提问于 2021-11-19 17:33:07
回答 1查看 818关注 0票数 0

当使用使用基本URI模板变量的自定义重定向URL配置security时,如本文所述:https://docs.spring.io/spring-security/site/docs/5.2.12.RELEASE/reference/html/oauth2.html#oauth2Client-auth-code-redirect-uri

应用程序进入一个太多重定向的循环。

此配置工作: spring.security.oauth2.client.registration.okta.redirect-uri={baseUrl}/login/oauth2/code/{registrationId}

这不是: spring.security.oauth2.client.registration.okta.redirect-uri={baseScheme}://{baseHost}{basePort}{basePath}/login/oauth2/code/{registrationId}

由于证书和负载平衡器等等,我们需要愚弄spring,将其重定向到https与其运行的http之间。所以我们需要修改的baseScheme。

通过使用基本URL,我们可以从浏览器中看到以下循环:

https://MyApp

  • gets
  • 用户访问应用程序url:重定向到Okta以与
    • 相匹配的redicrect url登录,然后用来自Okta
    • 的代码重定向到应用程序,然后重定向到他们正在寻找的

    中的页面

在baseScheme中使用重定向url,循环是:

用户访问应用程序url:https://MyApp

  • gets重定向到Okta,以便与与应用程序

  • 匹配的redicrect url登录,然后用来自Okta

  • 的代码重定向回应用程序,从Okta

  • 重定向到Okta

  • ,重定向到与Okta

< code >H 126H 126被重定向到OktaH 229H 130的应用程序,其代码与OktaH 231/code>H 132被重定向到MyApp/oauth2代码>不同。/authorization/okta

  • until它崩溃了。

我们可能会错过什么环境?为什么Spring要转到/oauth2/authorization/okta而不是他们开始调用的原始页面?

注意:从okta重定向回应用程序的说明:这两个设置都是完全相同的重定向URL:./login/OAuth2/code/okta?code=.

我的结论是:设置重定向URL是正确调用Okta,但影响应用程序如何响应重定向调用。

当调试开始时,下面是一个工作调用堆栈:

/login/oauth2/code/okta?code=Es23ULHG3psIXKE3fSk8vaiCITMiAKozHj4KU72n5K4&state=0w_8uffbbnhb5VNT31W4J2pvd1hE1f3_qSpOMA5_h7c%3D

  • 2021-11-19

  • 2021-11-19 12:59:21.690调试7400 -- nio-8080-exec-4 o.s.security.web.FilterChainProxy :安全GET 12:59:21.690调试7400 -- nio-8080-exec-4 s.s.w.c.SecurityContextPersistenceFilter :将SecurityContextHolder设置为空 12:59:22。855调试7400 -- nio-8080-exec-4 .s.ChangeSessionIdAuthenticationStrategy :从.s.ChangeSessionIdAuthenticationStrategy修改的会话id

当它不起作用时

/login/oauth2/code/okta?code=khASdiRxOdJk24dMALJDyfzlAWy-ilvAP_qlmTB0J8k&state=le1Ddql8ZXmajKD6XwbLi-c42k_-H6MfrlVhHi4Gyhw%3D

  • 2021-11-19 2021-11-19 12:55:37.359调试1240 -- nio-8080-exec-5 o.s.security.web.FilterChainProxy :安全GET 12:55:37.359调试1240 -- nio-8080-exec-5 s.s.w.c.SecurityContextPersistenceFilter :将SecurityContextHolder设置为空的 12:55:37.359 DEBUG 1240 -- nio-8080-exec-5 o.s.s.w.a.AnonymousAuthenticationFilter :将SecurityContextHolder设置为匿名SecurityContextHolder
EN

回答 1

Stack Overflow用户

发布于 2021-11-19 18:52:32

这里有几个问题。

首先,您不需要“愚弄”Spring,让它知道您的应用程序是https还是HTTP。我猜您正在反向代理后面运行,只需确保设置了正确的X-Forwarded-*头:

https://docs.spring.io/spring-boot/docs/current/reference/html/howto.html#howto.security.enable-https

对于“太多重定向”问题,这通常是应用程序端的配置错误(我猜是无效的客户端id、客户端机密或颁发者)。

经常发生的情况是,应用程序重定向到IdP (Okta),IdP对用户进行身份验证,然后重定向回应用程序。

然后,应用程序向IdP返回一个反向通道请求,以验证用户的auth (通过交换一个code)。如果此交换失败,您将被重定向回IdP,但用户已经登录(SSO),因此它会将您送回应用程序(然后轮回运行)。

Security的默认日志记录有点稀疏(有意),但它使捕获类似于日志级别的事情变得困难:logging.level.com.springframework.security=DEBUG,您应该开始在日志文件中看到异常。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70038730

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档