我正在尝试将Java应用程序与Azure广告集成。
我已经在azure注册了一个应用程序并添加了重定向url,成功登录后,它被重定向到我的java应用程序,我正在使用msal库获取授权代码。
获取下面的异常
com.microsoft.aad.msal4j.MsalServiceException:AADSTS500112:返回地址
“http://testUrl”与答复地址“https://testUrl”不匹配
我在上面的URL中看到的唯一区别是http和https,即使我在应用程序注册中的重定向URL以及Microsoft登录URL中的redirect_uri中都提到了https。
顺便说一句,它在我的本地环境中工作,当我在服务器上托管它时不工作。
3条答案
按热度按时间jaxagkaj1#
在部署到生产环境中后,我们也遇到了同样的问题。https变成http的原因是,由于我处于负载平衡环境中,外部URL与内部URL不同(负载均衡器卸载了SSL处理)。当来自azure的http请求到达我们的web过滤器时,httpRequest.getRequestURL().toString()获取http而不是https。我们所做的是,要求devops团队在httprequest中添加一个header,并将原始URL发送到负载均衡器,在我们的代码中,我们提取http header而不是http请求本身。
具体来说,改变
字符串
到
型
HEADER_PROXY_URL
是devops注入原始url的头文件名。iyzzxitl2#
根据我的研究,Web应用和服务的重定向URL必须开始以方案
https
开头。如果你想使用方案http
,你可以使用http:\\localhost
。更多详细信息,请参阅https://learn.microsoft.com/en-us/azure/active-directory/develop/azure-ad-endpoint-comparison#restrictions-on-redirect-urlsxwbd5t1u3#
wty1127提到的负载均衡器与我遇到的问题相同,但wty1127使用的是Java,而我使用的是.NET Core。以下是我在Program.cs中所做的更改:
之前:
字符串
之后:
型
这会将Microsoft Graph的重定向URI设置为实际部署的位置,而不是自动检测到的错误位置。重定向URI从我的appsettings.json中获取,其中包含以下内容:
型
所以代码只是设置
options.RedirectUri = "https://url-of-my-deployed-website.example.com/signin-oidc"
。这解决了我的问题。