具有oauth的Azure应用程序网关删除令牌

时间:2019-04-02 10:29:28

标签: azure authorization azure-web-app-service azure-application-gateway

我们目前在天青的环境中正在努力解决问题。在当前的设置中,我们有一个连接到2个应用程序服务的应用程序网关。

  • 1个应用服务正在使用基本身份验证。这里没有什么错,它可以按预期工作。
  • 第二个应用程序服务将OAUTH与外部身份服务器一起使用。通过网关连接此应用程序服务时,所有调用都会导致401未经授权错误。

环境简介: Azure sketch

我们已经天蓝色地调查了对该服务的调用,并看到了以下内容: 首先使用Good令牌重定向到网关: enter image description here 其次,导致401错误的调用。如您所见,此调用不再具有令牌: enter image description here

如果我们不通过网关,则可以使用相同的令牌连接到服务。当我们通过网关时,会出现“未经授权”错误。

应用程序网关设置如下: 一个侦听器和两个具有路径规则的后端池。 所有使用/ service1 / *的呼叫将转到第一个应用程序服务,而使用/ service2 / *的呼叫将转到第二个应用程序。

有人知道为什么身份验证失败以及如何解决吗? 如果需要更多信息,请问我 预先感谢。

2 个答案:

答案 0 :(得分:0)

您是否在Application Gateway中启用WAF?

如果是,您是否可以通过启用日志来检查是什么规则阻止了此请求?

一旦您知道了为什么它会被阻止,就可以在WAF中启用排除功能,并以此使其起作用。

如果您有任何后续问题,请告诉我。

答案 1 :(得分:0)

只需要处理这个问题,然后找到一种解决它的方法。看来这是事件的顺序:

  1. AG Get的请求
  2. AG解析请求并存储部分包含请求标头的字典
  3. AG决定放弃Authorization标头,因为它很笨
  4. AG最终运行重写规则
  5. ...
  6. 利润!

因此,您实际上确实有权访问授权标头,您只需要对此有所了解。我要做的是添加2条重写规则以将其恢复:

优先级99:将X-Auth-Token设置为{http_req_authorization}

优先级100:将授权设置为{http_req_x_auth_token}

这会将授权令牌重新播放。确保设置优先级,以便它们按此顺序运行,否则将无法正常工作。请注意,尝试执行仅将授权设置为{http_req_authorization}的规则似乎被视为无操作,并且已被跳过。因此,我在其中创建了临时的X-Auth-Token标头。