4

在配置的 AKS 上有一个带有使用 AAD 身份验证的应用程序的 docker 容器。

基于这篇文章,还有配置入口。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:能够在没有答案的情况下找到类似的主题

UPDATE3:我决定不使用 nginx 作为入口。相反,我现在正在使用负载均衡器。很快就可以使用 Azure 应用程序网关入口控制器

4

2 回答 2

2

你试过这个吗?

默认情况下,如果为该 Ingress 启用了 TLS,控制器将使用 308 永久重定向响应将 HTTP 客户端重定向到 HTTPS 端口 443。

这可以ssl-redirect: "false"在 NGINX 配置映射中全局禁用,或者使用nginx.ingress.kubernetes.io/ssl-redirect: "false"特定资源中的注释在每个 Ingress 中禁用。

有关Ingress 文档链接的更多信息。

于 2018-07-12T07:19:29.430 回答
1

您必须决定是否使用 HTTPS。如果这只是开发周期的开始,请不要使用它并让身份验证工作 - 但尽快实施 HTTPS。

AAD 支持 http 和 https,当然,回复 url 必须分别添加到应用注册中。

正如@mihail-stancescu 所说,如果您选择不使用 HTTPS,则 ssl-redirect 必须设置为 false。除此之外,您还必须确保您的应用程序不会从 HTTP 重定向到 HTTPS。

将 curl 与 -L -k 和 -v 选项一起使用将为您提供有关您的请求实际发生的情况的大量信息。

解决 http/https 问题后,您必须删除入口中的所有重写注释。(例如ingress.kubernetes.io/rewrite-target: / 应该被删除)。

现在,如果您的相关服务的入口路径是 /myservice,那么回复 URL 还应该添加路径的那部分 ([host]/myservice/signin-oidc) - 在 AAD 应用程序注册和您的应用程序的配置。(配置中的路径不应包含主机)

如果您使用的是 https,那么您还必须拥有适当的证书。您可以将免费的 LetsEncrypt ( https://letsencrypt.org/ ) 与 KubeLego ( https://github.com/jetstack/kube-lego ) 结合使用,您可以在其中找到一些关于如何实现它的好例子。

于 2018-07-29T07:51:16.137 回答