0

我正在使用 MVC4 c# 并合并了一个本地安全令牌服务 (STS)。用户调用实际的网址,他们被被动地重定向到 STS 登录。当他们成功进行身份验证时,他们会被重定向到他们应该去的地方,这些都在重定向到 sts 的 URL 中进行了 urlencoded。

注销后,我们调用:

 this.Session.Abandon();
 this.Response.Cache.SetCacheability(HttpCacheability.NoCache);
 this.Response.ClearContent();

 // expires the claims
 FederatedAuthentication.SessionAuthenticationModule.SignOut();
 FederatedAuthentication.SessionAuthenticationModule.CookieHandler.Delete();
 WSFederationAuthenticationModule authModule = FederatedAuthentication.WSFederationAuthenticationModule
 Response.Redirect(WSFederationAuthenticationModule.GetFederationPassiveSignOutUrl(authModule.Issuer, authModule.Realm, null));

在我们的应用程序的桌面版本上,一切似乎都运行良好。用户返回 STS 登录页面,URL 显示 wlogin1(以及许多其他内容),并允许用户再次登录而不会出现问题。该 url 与它们第一次被重定向到 STS 时完全相同。完美,这就是我想要的。

现在,当在移动设备上使用完全相同的域/控制器/方法时,它只使用 jQueryMobile 和不同的局部视图,注销似乎工作并且用户被带回 STS 登录。然而,这一次,URL 只显示了从用于注销的移动 actionLink 实际调用的域/控制器/方法。当用户再次尝试登录时,登录总是不成功,因为此链接不适用于 sts 登录。

关于如何解决这个问题的想法,或者有什么问题?如果您需要任何澄清,请告诉我。谢谢!

4

1 回答 1

0

我能够解决这个问题!

查看它显示的移动站点的标题: X-Requested-With: XMLHttpRequest 因此,我尝试使用 ajax 注销,但有些东西不起作用。这是桌面和移动标题之间的唯一区别(显然除了用户代理)。开始围绕这个问题进行探讨。

在我的一个特定于移动设备的脚本中,我在 mobileinit 中添加了以下内容。答对了!哇,对于这样一个混乱的问题,这是一个多么简单的解决方案。

$(document).bind("mobileinit", function (event) {            
  $.mobile.ajaxEnabled = false;});

确保您也正确加载了您的库!我按以下顺序加载了我的 jquery 库:

  1. jQuery
  2. 移动 jquery 初始化文件(上面的东西)
  3. jquerymobile
  4. jQuery 验证
  5. 其他一切

我们正在使用以下 jQuery 库: jquery 1.9.1 jquery-ui 1.10.3 jquery.mobile 1.3.1 jquery.validate

希望这对其他人有帮助!

于 2013-12-13T21:27:02.733 回答