【问题标题】:JavasSript single sign out / back channel logoutJavasCript 单点注销/反向通道注销
【发布时间】:2019-09-11 06:22:56
【问题描述】:

我有一个身份服务器 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 客户端应用上实现单点注销/反向通道注销?

【问题讨论】:

    标签: javascript identityserver4


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 感谢您确认我的暂停选项 1 是不可能的。我不是客户端开发人员,所以不能 100% 确定。不幸的是,这是与银行相关的数据,因此用户需要尽快注销,我被告知 5 分钟太长了,因此需要进行大量轮询。我想知道 signalR 是否是一种选择。
    • 是的,这可能是一个选项。取决于您当前使用的技术。 Websocket、长轮询、服务器事件、singal-r 是一些选项。
    • 如果您有兴趣我的投票工作不正常,请跟进。 stackoverflow.com/q/57903692/1841839
    猜你喜欢
    • 2018-10-13
    • 1970-01-01
    • 2019-02-08
    • 2021-04-11
    • 2018-07-18
    • 2016-04-18
    • 2015-03-19
    • 2017-08-21
    • 2013-09-10
    相关资源
    最近更新 更多