我有一个身份服务器 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 中找出身份服务器本身上的身份验证会话?
相关分类