在已配置的AKS上,存在带有使用AAD身份验证的应用程序的docker容器。
基于this article,还配置了入口。 API运行良好。
当我添加带有https前缀的Azure Active Directory应用程序注册回复URL时,出现错误“请求中指定的回复URL与为应用程序配置的回复URL不匹配”。而且我发现在浏览器地址行中redirect_uri以http开头。
当我添加以http开头的回复URL时,我会收到“异常:关联失败”。
我尝试过的操作:添加到ingress.yaml设置中ingress.kubernetes.io/force-ssl-redirect:“ true”
也许有某种方法可以强制入口运行https而不是http,或者可能有一些AAD重定向配置?有什么想法吗?
更新2:可能是http重定向是由于ADAL引起的。
PS:能够找到similar topic而没有答案
UPDATE3: 我决定不使用nginx作为入口。相反,我现在正在使用负载均衡器。很快将有可能使用Azure应用程序网关入口控制器
答案 0 :(得分:2)
您尝试过吗?
默认情况下,如果该入口启用了TLS,则控制器将使用308永久重定向响应将HTTP客户端重定向到HTTPS端口443。
可以使用NGINX配置图中的
ssl-redirect: "false"
全局禁用此功能,也可以在特定资源的每个入口中使用nginx.ingress.kubernetes.io/ssl-redirect: "false"
批注禁用该功能。
有关此on the Ingress documentation link的更多信息。
答案 1 :(得分:1)
您必须决定是否使用HTTPS。如果这只是开发周期的开始,请在没有开发周期的情况下开始使用auth,但要尽快实施HTTPS。
AAD支持http和https,但是必须将回复URL分别添加到应用程序注册中。
正如@ mihail-stancescu所说,如果您选择不使用HTTPS,则必须将ssl-redirect设置为false。除此之外,还必须确保您的应用程序不进行从HTTP到HTTPS的重定向。
使用带有-L -k和-v选项的curl可以为您提供许多有关请求实际发生的信息。
解决http / https问题后,您必须删除入口中具有的所有重写注释。 (例如ingress.kubernetes.io/rewrite-target: /
应该被删除)。
现在,如果您到相关服务的入口路径为/ myservice,则答复URL还应该在AAD应用程序注册和应用程序配置中都添加路径的那一部分([host] / myservice / signin-oidc)。 (配置中的路径不应包含主机)
如果使用的是https,则还必须具有适当的证书。您可以将免费的LetsEncrypt(https://letsencrypt.org/)与KubeLego(https://github.com/jetstack/kube-lego)结合使用,在那里可以找到一些有关如何实现它的漂亮示例。