【问题标题】:Azure App Service authentication behind a reverse-proxy反向代理背后的 Azure 应用服务身份验证
【发布时间】:2017-12-19 14:40:42
【问题描述】:

我正在使用 Azure 应用服务中的身份验证,也就是“简单身份验证” https://docs.microsoft.com/en-us/azure/app-service/app-service-authentication-overview

如果我使用它的 Azure 名称浏览我的 azure 网站,它工作正常:[myid].azurewebsites.net 但是,如果将我的网站放在反向代理后面,在身份验证后,我总是被重定向到 [myid].azurewebsites.net 而不是 www.[mydomain].com。反向代理已正确配置为为我的页面提供服务,并且无需身份验证即可正常工作。

我认为根本原因是“Easy Authentication”如何构建redirect_uri参数。使用 Chrome F12 我注意到在初始重定向到身份验证服务期间,浏览器 url 是使用 [myid].azurewebsites.net 而不是 www.[mydomain].com 构建的。

https://login.windows.net/034...51/oauth2/authorize?response_type=id_token&redirect_uri=https%3A%2F%2Fmyid.azurewebsites.net%2F.auth%2Flogin%2Faad%2Fcallback&......

我找不到指示/强制“简易身份验证”使用 www.[mydomain].com 的方法

有什么建议或想法吗?

--- 更新 ---
我使用 Nginx 作为反向代理。配置文件的相关片段(已编辑):

server {
        server_name www.mydomain.com;
        listen 80;
        listen 443 ssl;
        ...
        location / {
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header X-Real-Host $host;
                proxy_pass https://myid.azurewebsites.net/;
        }
}

【问题讨论】:

  • 你是如何实现反向代理的,URL Rewrite?请更新您的问题并提供更多详细信息。
  • @BruceChen 问题已更新。反向代理本身工作正常。也许任何额外的标头都可以帮助“Easy Auth”了解背后有反向代理,但我还没有找到任何相关文档。

标签: azure azure-web-app-service azure-authentication


【解决方案1】:

我们需要包含一个额外的参数来指示成功验证后进程应该重定向到的位置。我们可以使用 'post_login_redirect_uri' 参数来做到这一点。如果没有这个,该过程将重定向到默认的“身份验证成功”页面,其中包含返回该站点的链接。

更多详情,请参阅此文档:https://weblogs.asp.net/pglavich/easy-auth-app-service-authentication-using-multiple-providers

【讨论】:

  • post_login_redirect_uri 不能解决我的问题。在成功认证后使用它来将用户重定向到目标页面。我需要的是在第一个身份验证 URL (login.windows.net/.....) 中“注入” www.mydomain.com 而不是 myid.azurewebsites.net
【解决方案2】:

根据您的描述,我使用URL RewriteAzure Functions Proxies 作为我的反向代理来测试这个问题,我发现我可能会遇到与您提到的相同的问题。我也试过比较HeadersServerVariables在反向代理访问和直接访问之间,并试图覆盖相关的头来缩小这个问题,但最终失败了。我假设由于我们使用的是内置应用服务身份验证/授权,因此我们无法覆盖 redirect_uri 参数的生成。

根据我的理解,您可以在反向代理下设置附加标头,然后在您的应用程序中构建身份验证/授权以获取用于生成 redirect_uri 的附加标头并将用户重定向到相关授权端点。或者,您可以将 Traffic Manager 用于负载均衡器,并且您可以关注此 issue。此外,如果您只想自定义您的 azure web 应用程序域,您可以关注here

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-01-24
  • 1970-01-01
  • 2021-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-24
相关资源
最近更新 更多