猿问

如何查看用户是否已从 Javascript 应用程序退出身份服务器

我有一个身份服务器 4 应用程序、servral asp .net 核心应用程序和一个 Javascript 应用程序。我在 asp .net 核心应用程序上启用了反向通道注销。这样,如果其中一个应用程序注销,它们几乎都会立即注销。


我遇到的问题是 JavaScript 应用程序需要每分钟轮询身份服务器以确保用户仍处于登录状态。


例子:


用户登录了 Asp .net 核心应用程序 1、Asp .net 核心应用程序 2 和 Javascript 应用程序。请注意,这些是金融应用程序,用户需要知道,如果他们退出一个应用程序,那么他们离开办公桌时就会退出所有应用程序。


他们登录到授予每个应用程序令牌的身份服务器。然后,用户从 Asp .net 核心应用程序 1 注销。反向通道注销通知 Asp .net 核心应用程序 2 用户现在已注销,并将其也注销。


JavaScript 应用程序也需要注销。我能想到的唯一方法是轮询身份服务器以查看用户是否已注销。如果他们有,那么我需要让他们退出 JavaScript 应用程序。


JavaScript 计时器

我创建了一个计时器,该计时器当前每秒运行一次,调用身份服务器


setInterval(myTimer, 1000);

function myTimer() {

    mgr.getUser().then(function (user) {


        //var url = config.authority + "/connect/userinfo";

        var url = config.authority + "/api/user/LoggedIn";

        var xhttp = new XMLHttpRequest();


        xhttp.onreadystatechange = function () {

            if (this.readyState == 4 && this.status == 200) {

                alert(this.responseText);

            }

        };



        xhttp.open("GET", url);

        xhttp.setRequestHeader("Authorization", "Bearer " + user.access_token);

        xhttp.send();

    });


}

身份服务器端点

我在身份服务器上创建了一个 api 端点,用于检查用户是否获得授权。


[Route("api/[controller]")]

[ApiController]

public class UserController : ControllerBase

{


    [HttpGet("LoggedIn")]

    public IActionResult LoggedIn()

    {

        return Ok(new { IsLoggedIn = User.Identity.IsAuthenticated });

    }

}

问题是因为这个 api 端点没有加载用户身份。 User.Identity.IsAuthenticated即使用户登录到身份服务器,它也会返回 false。


如何检查用户是否仍然登录到身份服务器?是否有更好的端点可以告诉我用户是否有活动会话并已登录?我尝试了 userinfo 端点,但通过传递一个有效的访问令牌,它只会返回 true,即使用户现在已注销。有没有办法从 JavaScript 中找出身份服务器本身上的身份验证会话?


慕尼黑5688855
浏览 166回答 2
2回答
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答