程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了带有 Azure AD 的 Spring Security 和反向代理背后的 redirect_uri 问题大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决带有 Azure AD 的 Spring Security 和反向代理背后的 redirect_uri 问题?

开发过程中遇到带有 Azure AD 的 Spring Security 和反向代理背后的 redirect_uri 问题的问题如何解决?下面主要结合日常开发的经验,给出你关于带有 Azure AD 的 Spring Security 和反向代理背后的 redirect_uri 问题的解决方法建议,希望对你解决带有 Azure AD 的 Spring Security 和反向代理背后的 redirect_uri 问题有所启发或帮助;

我一直在网上搜寻我的问题的解决方案,如下所示 -

我们有一个带有 Spring Security OAuth2 和 Azure Active Directory 集成的 Spring boot 应用程序来管理我们的外部身份验证。当我们尝试登录时,登录URL中的redirect_uri是错误的。

redirect_uri 显示为在 application.yaml 和 Azure AD 门户中定义的“&redirect_uri=https://10.10.10.10/v1/login/oauth2/code/”,而是显示为“&redirect_uri=http ://10.10.10.10:8080/v1/login/oauth2/code/”。如您所见,它正在删除 https 方案并添加端口,这导致由于 redirect_uri 不匹配而导致登录错误。需要注意的是,这在本地工作正常,但是当部署到反向代理后面的环境时,它不起作用。

我尝试过的 -

在application.yaml中添加以下属性-

  • server.forWARD-headers-strategy=NATIVE
  • server.forWARD-headers-strategy=FRAMEWORK
  • server.tomcat.internal-proxIEs=.*
  • server.tomcat.remoteip.protocol-header=x-forWARDed-proto
  • server.tomcat.remoteip.remote-ip-header=x-forWARDed-for

将此添加到路径的 Nginx 配置 -

      resolver 127.0.0.11 valID=30s;
      set $upstream_be application;
      proxy_pass http://$upstream_be:8080;
      proxy_set_header X-ForWARDed-For $proxy_add_x_forWARDed_for;
      proxy_set_header X-ForWARDed-Proto $scheR_400_11845@e;
      proxy_set_header X-ForWARDed-Port $server_port;
      proxy_set_header Host $host;

不幸的是,这一切都没有奏效,问题仍然存在。大家有什么想法吗?

相关pom.xml版本:spring-boot、spring-security=2.4.5、所有azure-spring依赖项=3.4.0

在我们将 azure 依赖项从 2.3.5 升级到 3.4.0 之前,这也运行良好。

解决方法

当代理应用标准的RFC7239 "ForWARDed Headers"如X-ForWARDed-ProtoX-ForWARDed-Host时,应用以下两种配置后应该正确计算重定向url。 (我假设您使用的是 tomcat

server.forWARD-headers-strategy=NATIVE

"如果代理添加了常用的X-ForWARDed-For和 X-ForWARDed-Proto 标头,将 server.forWARD-headers-strategy 设置为 NATIVE 足以支持这些。”

server.tomcat.redirect-context-root=false

如果您使用 tomcat 并在代理处终止 SSL, server.tomcat.redirect-context-root 应设置为 false。这 允许在任何重定向之前遵守 X-ForWARDed-Proto 标头 执行。

Spring Boot 中的重定向 URL 是如何定义的?如果您对基本 URL 使用占位符,例如 {BaseUrl}/login/oauth2/code/{registrationID},则上述配置有效。这样,{BaseUrl} 占位符由 Spring Security 动态解析,具体取决于它是否位于代理之后。

官方文档中的更多信息:

  • Spring Boot - Running Behind a Front-end Proxy Server
  • Spring Security - Proxy Server Configuration

大佬总结

以上是大佬教程为你收集整理的带有 Azure AD 的 Spring Security 和反向代理背后的 redirect_uri 问题全部内容,希望文章能够帮你解决带有 Azure AD 的 Spring Security 和反向代理背后的 redirect_uri 问题所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。