У меня запущено веб-приложение Java на Tomcat, развернутое в службе приложений Azure. Аутентификация обрабатывается через Azure AD. В локальной среде все работает нормально.
Когда мы развертываем приложение в Azure, httpRequest.getScheme () всегда возвращает HTTP независимо от того, выполняется ли вызов с конечной точки HTTPS.
В результате URL-адрес перенаправления создается с конечной точкой HTTP и не соответствует URL-адресу перенаправления, указанному в регистрациях приложений Azure AD. 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
Кто-нибудь еще сталкивался с этой проблемой? Как этого можно избежать?