JavasSript单点注销/反向通道注销

时间:2019-09-11 06:22:56

标签: javascript identityserver4

我有一个身份服务器4应用程序,带有一个JavaScript客户端和几个asp .net核心客户端。

JavaScript客户端是使用Adding a JavaScript client创建的。

我已经在asp .net核心应用程序上实现了反向通道注销。这样一来,当他们注销时,他们都会注销自己。我遇到的问题是JavaScript应用程序。我看不到反向频道注销将如何工作。我唯一能想到的就是让下面的代码每分钟检查一次服务器,以查看用户是否仍在登录。但这听起来像是对身份服务器的大量调用。

function login() {
    mgr.signinRedirect();
}

function api() {
    mgr.getUser().then(function (user) {
        var url = "http://localhost:5001/identity";

        var xhr = new XMLHttpRequest();
        xhr.open("GET", url);
        xhr.onload = function () {
            log(xhr.status, JSON.parse(xhr.responseText));
        }
        xhr.setRequestHeader("Authorization", "Bearer " + user.access_token);
        xhr.send();
    });
}

function logout() {
    mgr.signoutRedirect();
}

有没有一种方法可以在JavaScript客户端应用程序上实现单点登出/反向通道登出?

1 个答案:

答案 0 :(得分:1)

没有更好的方法可以做到这一点。考虑一下,服务器必须通知客户端注销事件。它可以通过3种方式完成。

  1. 服务器发送注销事件
  2. 客户端进行轮询并定期获取此信息。
  3. 魔术-显然这不是有效的选择。

您已经在尝试选项2。限制流量的唯一方法是可以减少轮询间隔。客户端会话立即停用是否重要?您可以在客户端完成下一个服务器请求后停用会话。

关于选项1。您可以使用异步事件(如长轮询或websocket)将数据发送回客户端。