我们有一位客户要求我们使用联合身份验证来保护其Sitecore 8.0网站的一部分。他们将网站托管在一台服务器上,并且他们的身份验证系统位于其后端的其他位置。以下是他们为实现身份验证而给我的代码:
Startup.Auth.cs 公共部分类启动 { private static string realm = System.Configuration.ConfigurationManager.AppSettings [" ida:Wtrealm"]; 私有静态字符串adfsMetadata = System.Configuration.ConfigurationManager.AppSettings [" ida:ADFSMetadata"];
public void ConfigureAuth(IAppBuilder app)
{
app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType);
app.UseCookieAuthentication(new CookieAuthenticationOptions());
app.UseWsFederationAuthentication(
new WsFederationAuthenticationOptions
{
Wtrealm = realm,
MetadataAddress = adfsMetadata
});
}
}
然后,就像将[Authorize]属性添加到控制器操作一样简单。对于此特定控制器操作,有[HttpGet]操作和[HttpPost]操作。
当我访问安全页面时,我会被正确地重定向到他们的ADFS系统。然后我可以输入凭据,输入正确的凭据后,我会被重定向回我的安全页面,但是会引发以下错误:
从客户端检测到潜在危险的Request.Form值 (wresult = T:RequestSecurityTo ...)
我知道我已成功登录,因为我可以浏览并访问其他页面或完全关闭浏览器,并且它不会再将我重定向回登录页面,它只是让我回来带有该错误的安全页面。
我已经尝试在get动作和post动作上禁用输入验证,我尝试从这些动作中删除所有内容,只是返回一个字符串而不是ActionResult,这样我就可以确保页面上没有任何内容导致任何奇怪的事情。
我认为ADFS登录页面导致了问题,因为看起来当您访问登录页面时,在成功登录后,页面会回发到您尝试访问的安全页面,可能包括一些标头中的HTML或JS并导致验证错误。在随后访问我的安全页面时,由于我已经登录,我可以看到该页面短暂地重定向到ADFS页面(可能是为了测试我还没有登录)然后将我反弹回我的安全页面。
我也尝试过运行Wireshark和Fiddler尝试查看标题中的内容,但我似乎无法从这些工具中获得任何有用的东西(特别是Wireshark,我无法和#39;弄清楚如何从中获取标题信息,并且没有HTTP请求(发布或获取)发生在我可以看到的安全页面上。
我可以尝试解决此问题吗?为什么我的控制器操作没有遵守ValidateInput(false)?我认为至少,它至少会让我到达我的页面。
最后,我说我已经读过这个并将requestValidationMode添加到我的网站,但现在他们的ADFS已关闭,所以我无法验证这是否有效,直到#39 s备份。
答案 0 :(得分:0)
我能够使用Sitecore管道禁用请求验证。
http://blog.baslijten.com/how-to-add-federated-authentication-with-sitecore-and-owin/