我有一个在部署到 Azure 应用服务的 Tomcat 上运行的 Java webapp。身份验证通过 Azure AD 处理。在本地环境中,一切似乎都运行良好。
当我们将应用程序部署到 Azure 时,无论调用是否来自 HTTPS 端点,httpRequest.getScheme() 始终返回 HTTP。
因此,重定向 URL 是使用 HTTP 终结点构造的,并且与 Azure AD 应用注册中指定的重定向 URL 不匹配。redirectUrl 的构造如下。
String currentUri = httpRequest.getRequestURL().toString();
String redirectUrl = authority + tenant +
"/oauth2/authorize? response_type=code&scope=user.read.all&response_mode=form_post&redirect_uri="
+ URLEncoder.encode(currentUri, "UTF-8") + "&client_id=" + clientId +
"&resource=https%3a%2f%2fgraph.microsoft.com" + "&state=" + state + "&nonce="
+ nonce;
我已经搜索并找到了这个 - https://creechy.wordpress.com/2011/08/22/ssl-termination-load-balancers-java/。负载均衡器可能会导致此类问题,我们需要修改 Tomcat配置。
如果我们在本地服务器上部署 WAR 文件,应用程序可以正常工作。问题仅出现在 Azure 中。
redirectUrl 始终包含http://xxxxx.azurewebsites.net,但在应用注册中,redirectUrl 指定为https://xxxx.azurewebsites.net
有没有其他人遇到过这个问题?如何避免这种情况?