Azures inbuild网站授权在返回我的网站后抛出权限错误

时间:2015-06-26 00:36:36

标签: asp.net asp.net-mvc azure azure-web-sites glimpse

通过Azure门户在我的网站上激活“身份验证/授权”时。

在我被重定向回我的网站后,我没有收到例外"You do not have permission to view this directory or page."

此外,它还会根据此网址格式将我重定向回我的网站:https:// {somewebsitename} .azurewebsites.net / {ActiveDirectoryApplicationGuid} / login

当我查看详细记录的错误时,我可以看到此错误:

<h3>HTTP Error 403.71 - Forbidden</h3> 
<h4>You do not have permission to view this directory or page.</h4> 
</div> 
<div class="content-container"> 
<fieldset><h4>Most likely causes:</h4> 
<ul>    <li>This is a generic 403 error and means the authenticated user is not authorized to view the page.</li> </ul> 
</fieldset> 
</div> 
<div class="content-container"> 
<fieldset><h4>Things you can try:</h4> 
<ul>    <li>Create a tracing rule to track failed requests for this HTTP status code. For more information about creating a tracing rule for failed requests, click <a href="http://go.microsoft.com/fwlink/?LinkID=66439">here</a>. </li> </ul> 
</fieldset> 
</div> 
<div class="content-container"> 
<fieldset><h4>Detailed Error Information:</h4> 
<div id="details-left"> 
<table border="0" cellpadding="0" cellspacing="0"> 
<tr class="alt"><th>Module</th><td>&nbsp;&nbsp;&nbsp;EasyAuthModule_32bit</td></tr> 
<tr><th>Notification</th><td>&nbsp;&nbsp;&nbsp;AuthenticateRequest</td></tr> 
<tr class="alt"><th>Handler</th><td>&nbsp;&nbsp;&nbsp;ExtensionlessUrlHandler-Integrated-4.0</td></tr> 
<tr><th>Error Code</th><td>&nbsp;&nbsp;&nbsp;0x80004005</td></tr> 
</table> 
</div>

EasyAuthModule不是我们的代码或任何引用的库的一部分。

我该如何解决这个问题? 这个确切的设置过去工作得很好,刚刚停止工作。这增加了混乱。

2 个答案:

答案 0 :(得分:1)

这是EasyAuthModule实际上是Microsoft库。 Azure支持人员告诉我,他们刚搬到了本地图书馆EasyAuthModule

Glimpse 似乎存在兼容性问题。

从我的web.config中删除任何Glimpse引用后,它现在正常工作!

Azure支持告诉我他们正在努力解决这个问题,所以我们可以再次使用Glimpse。

答案 1 :(得分:1)

正如 Sam7 所述。 EasyAuthModule 是一个HTTP模块,作为身份验证/授权功能的一部分注入到网站流程中。最近对此模块进行了更改,这可能会导致与在同一应用程序中运行的其他HTTP模块发生冲突。 Glimpse是一个这样的HTTP模块,它具有默认配置,已知会导致与最新版本的EasyAuthModule冲突。

编辑:2015年9月30日 最近对EasyAuthModule进行了更新,Glimpse现在可以正常工作。

警告,下面的超级技术细节

问题是诸如Glimpse模块的HTTP模块可能在每个HTTP请求的开头读取HTTP请求实体主体。通常这很好,因为ASP.NET托管模块可以读取ASP.NET请求的内容而不会产生任何副作用。但是,这可以防止任何非ASP.NET代码读取请求正文 - 在这种情况下,Glimpse会阻止新版本的EasyAuthModule(从ASP.NET托管模块转换为本机IIS模块)读取登录令牌用户登录时从Azure AD发送的内容。结果是HTTP 403.71响应。

要解决此问题,您可以禁用正在读取HTTP请求内容的第三方模块(例如Glimpse),或者将其配置为停止读取请求内容以获取登录请求(我相信Glimpse,例如有一个排除某些网址和/或只读取请求标头的方法 - 我将遵从documentation这样做。这将允许EasyAuthModule读取Azure AD登录令牌并成功验证HTTP请求。

从长远来看,EasyAuthModule将以某种方式进行重构,以确保它在第三方模块可以读取之前拦截HTTP请求以避免此类兼容性问题。不幸的是,现在你需要修改你的配置来解决这个问题,直到做出永久修复。