gpt4 book ai didi

oauth-2.0 - 有没有办法从 Identity Server 中的客户端更新 IDP session token

转载 作者:行者123 更新时间:2023-12-02 23:02:51 24 4
gpt4 key购买 nike

我正在使用 Identity Server 来实现公司应用程序的单点登录/退出。有什么方法可以使当客户端的 cookie 更新(通过滑动过期)时,它也会转到 IDP 并更新其 session cookie 的过期时间?目标是即使在 IDP session 应该过期之后,也能够在所有应用程序之间共享 1 小时的滑动过期时间。

我现在能想到实现这一目标的唯一方法是创建一些中间件来检查客户端上的 cookie,如果它即将过期,则添加一个 iframe 来调用 IDP 上的端点以告诉它更新它的 cookie还。我走在正确的轨道上吗? Identity Server 中是否内置了类似的机制?如果有,端点是什么?

为清楚起见进行编辑:

问题

  • 10:00 前往客户 A
    • 重定向至 IDP 并登录
    • 重定向回客户端
      • 现在就客户 A 和 IDP 进行 session ,直至 10:10
    • 在客户端 A 上保持活跃状态​​直至 10:15,然后转至客户端 B
    • 用户必须再次登录,因为客户端 A 站点已使其 cookie 保持事件状态,但 IDP 已过期 - 这是我希望客户端 A 在 IDP 上调用幻灯片以保持其状态的位置 session 与任何客户端一起处于事件状态,我可以转到客户端 B,而无需再次登录

最佳答案

我的情况与@Brock Allen不同的答案解决了。由于我们在内部使用身份验证,因此我需要在用户浏览网站时保持 STS session cookie 处于事件状态。这样,如果 STS cookie 一小时后过期,但用户在任何客户端站点上事件的时间超过 1 小时,他们就可以转到另一个客户端站点,而不必再次登录 STS。

我已经在 IDP 上使用以下代码解决了该问题:

public class Startup
{
//...
public void Configuration(IAppBuilder app)
{
//...
app.Map("/identity", appBuilder =>
{
var idSrvOptions = new IdentityServerOptions
{ /* Your IdSrv config options here */ };

appBuilder.UseIdentityServer(idSrvOptions);

appBuilder.Map("/slide", identityAppBuilder =>
{
identityAppBuilder.Run(async context =>
{
var cookie = context.Environment.ResolveDependency<SessionCookie>();
cookie.ClearSessionId();
cookie.IssueSessionId(null);
await Task.FromResult(0);
});
});
});
}
}

来自客户端/依赖方,我有以下 JavaScript(它只是将不可见的图像放入 html 正文中,如果用户处于事件状态,则每 X 分钟在 src 中刷新一次 - 这将滑动 STS 的 cookie w/o 不必担心 iframe)。这可以放入中间件中,自动将其注入(inject)到所有包含 <body> 的 html 响应中。标签或简单地添加到布局文件中:

 (function () {
this.cookieDuration = 10000;
this.lastAction = new Date();

this.img = document.createElement('img');
this.img.src = 'https://myStsDomain.com/identity/slide';
this.img.setAttribute('style', 'display: none');
document.body.appendChild(img);

setInterval(refreshStsCookie, cookieDuration * .5);

document.addEventListener('click',
function() {
if (isLastActionLessThanCookieDuration()) {
lastAction = new Date();
}
});

function isLastActionLessThanCookieDuration() {
return (new Date() - lastAction) < cookieDuration;
}

function refreshStsCookie() {
if (isLastActionLessThanCookieDuration()) {
img.src = img.src;
}
}
})()

关于oauth-2.0 - 有没有办法从 Identity Server 中的客户端更新 IDP session token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39627842/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com