我正在研究使用 WIF 来识别在 EPiServer 上运行的客户站点的部分用户的可能性。我已经设法让 WIF 开始使用以下帖子:
如果你设置这很好用
<authorization>
<deny users="?"/>
</authorization>
在 web.config 中,发出所有请求都需要经过身份验证的用户。但是,我们想使用 EPiServer 来区分匿名用户和经过身份验证的用户应该可以使用哪些内容。问题是,我就是无法让它工作。
当我启用 WIF 并且未设置deny users="*"
时,EPiServer 会在启用 WIF 以执行重定向之前启动并向响应流输出一些文本:
HTTP/1.1 401 Unauthorized
Cache-Control: private
Content-Type: text/html
Server: Microsoft-IIS/7.5
X-Powered-By: ASP.NET
Date: Tue, 01 Nov 2011 07:51:04 GMT
Connection: close
Access denied.
</pre></table></table></table></table></table></font></font></font></font></font></i></i></i></i></i></b></b></b></b></b></u></u></u></u></u><p> </p><hr>
当 WIF 尝试重定向到 STS 时,这会导致以下错误:
“/”应用程序中的服务器错误。
发送 HTTP 标头后无法重定向。
说明:执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。
异常详细信息:System.Web.HttpException:发送 HTTP 标头后无法重定向。
源错误:
在执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪来识别有关异常起源和位置的信息。
堆栈跟踪:
[HttpException (0x80004005): HTTP headers 发送后无法重定向。] System.Web.HttpResponse.Redirect(String url, Boolean endResponse) +8712587
Microsoft.IdentityModel.Web.WSFederationAuthenticationModule.RedirectToIdentityProvider(String uniqueId, String returnUrl, Boolean persist ) +249
Microsoft.IdentityModel.Web.WSFederationAuthenticationModule.OnEndRequest(Object sender, EventArgs args) +438
System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +68 System.Web.HttpApplication.ExecuteStep(IExecutionStep 步骤, 布尔值和完成同步)+75
我已经搜索了高和低以便能够覆盖这种行为。在 EPiServer.dll 中,我发现以下位置输出的文本类似于输出的内容:
AccessDeniedDelegateHandler.cs
,方法BrowserLogonAccessDenied(object sender)
:
internal static void BrowserLogonAccessDenied(object sender)
{
HttpContext.Current.Response.Clear();
HttpContext.Current.Response.Status = "401 Unauthorized";
HttpContext.Current.Response.Write("Access denied.");
HttpContext.Current.Response.Flush();
HttpContext.Current.Response.End();
}
据我所知,这段代码是从以下两个地方调用的:
EPiServer.Global
, 方法protected virtual void HandleAccessDenied()
EPiServer.PageBase
, 方法public virtual void AccessDenied()
我试图在我的页面模板中HandleAccessDenied
覆盖Global.asax
和覆盖。AccessDenied
但是,仍会输出“拒绝访问”文本。看起来好像AcccessDenied
我的页面模板中的覆盖正在触发,但是,覆盖HandleAccessDenied
似乎没有触发。
关于这里可能有什么问题的任何提示?