通过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> EasyAuthModule_32bit</td></tr>
<tr><th>Notification</th><td> AuthenticateRequest</td></tr>
<tr class="alt"><th>Handler</th><td> ExtensionlessUrlHandler-Integrated-4.0</td></tr>
<tr><th>Error Code</th><td> 0x80004005</td></tr>
</table>
</div>
此EasyAuthModule
不是我们的代码或任何引用的库的一部分。
我该如何解决这个问题? 这个确切的设置过去工作得很好,刚刚停止工作。这增加了混乱。
答案 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请求以避免此类兼容性问题。不幸的是,现在你需要修改你的配置来解决这个问题,直到做出永久修复。