AADSTS500112:请求授权码时回复地址“http://testurl”与回复地址“https://testurl”不匹配

ana*_*ddy 0 java azure-active-directory azure-ad-msal

我正在尝试将 java 应用程序与 azure ad 集成。

我已经在 azure 中注册了一个应用程序并添加了重定向 url,成功登录后,它被重定向到我的 java 应用程序,我正在使用 msal 库获取授权代码。

得到以下异常

com.microsoft.aad.msal4j.MsalServiceException: AADSTS500112: 回复地址

http://testUrl ”与回复地址“ https://testUrl ”不匹配

我在上面的 url 中看到的唯一区别是 http 和 https,尽管我在应用程序注册中的重定向 url 以及 microsoft 登录 url 中的 redirect_uri 中都提到了 https。

顺便说一句,它在我的本地环境中工作,当我将它托管在服务器上时不起作用。

小智 5

在生产环境中部署后,我们遇到了同样的问题。https 变成 http 的原因是因为我处于负载平衡环境中,外部 URL 与内部 URL 不同(负载平衡器卸载了 SSL 处理)。当来自 azure 的 http 请求到达我们的 Web 过滤器时,httpRequest.getRequestURL().toString() 获取 http 而不是 https。我们所做的是,要求 devops 团队在 httprequest 中添加一个标头,并将原始 url 发送到负载均衡器,并且在我们的代码中,我们提取 http 标头而不是 http 请求本身。

具体来说,改变

String currentUri = httpRequest.getRequestURL().toString();
Run Code Online (Sandbox Code Playgroud)

String currentUri = httpRequest.req.getHeader(HEADER_PROXY_URL);
Run Code Online (Sandbox Code Playgroud)

HEADER_PROXY_URL是DEVOPS注入原始URL的头名。