什么是在注销ServiceStack后强制浏览器重定向的最佳方法

时间:2014-03-19 18:44:59

标签: authentication redirect servicestack logout

目前,当用户注销注销过程正常但用户仍然在同一屏幕上时,仍然可以看到安全数据。

退出ServiceStack后强制浏览器重定向的最佳做法是什么?

1 个答案:

答案 0 :(得分:0)

服务器无法强制执行客户端重定向。在您注销后,客户真的可以强制执行数据安全性。如果客户端已经信任安全数据,那么在会话过程中,您需要相信客户端会在会话结束时对其进行适当保护。

虽然您可以让ServiceStack在注销时向客户端发送重定向标头,但没有任何东西需要客户端实际执行该操作。

如果JavaScript客户端向ServiceStack发出AJAX请求以退出,则重定向响应不会影响显示安全数据的页面,因为AJAX请求在与显示数据的页面不同的范围内有效运行,并且这样页面就不会受到重定向的影响。因此重定向是无用的,除非客户端明确提供了处理此类事件的机制。

客户必须负责离开安全数据本身。最佳做法是:

在调用注销操作的成功方法中,您应该:

  • 处置内存数据中的任何敏感内容。即显示数据的JavaScript变量/ DOM元素。
  • 删除会话Cookie
  • 重定向登录

如果您已正确保护服务,那么浏览历史记录仍应触发会话检查,此会话检查将不再是有效会话,您应该被重定向。

您之前提到过使用AngularJS。如果您使用$http服务执行此操作,则可以使用success回调,如下所示:

$http({method: 'POST', url: '/auth/logout', data: { provider: "logout" }}).success(
    function(data, status, headers, config) {
        $scope.someValue = null; // Remove sensitive values from the scope (though it should be cleared up anyway with the redirect to a different state)
        $cookieStore.remove('ss-id'); // Remove the cookie
        $state.transitionTo('login'); // Redirect to login state
    }
);    

此示例假设您已注入$ http,$ cookieStore,$ state providers

TL;博士

  • 客户端必须强制执行安全性。服务器重定向应仅被视为对客户的建议。
  • 使用注销请求操作的成功回调来删除会话cookie,处理内存中的任何值并重定向远离数据。

希望这有帮助。