Identityserver4 Identity Server 4-如何解决客户端注销后访问令牌仍然有效的问题?

Identityserver4 Identity Server 4-如何解决客户端注销后访问令牌仍然有效的问题?,identityserver4,access-token,Identityserver4,Access Token,我们正在尝试将Identity Server 4 IDSV4与Mvc客户端和WebApi2客户端集成 我们发现,访问令牌仍然有效,即使用户已从客户端和IDSV4注销,也可以使用它来使用WebApi2提供的服务 我不知道如何在用户注销后立即强制它失效 以下是重现这种行为的步骤: 打开Mvc客户端并登录到IDSV4 使用await HttpContext.GetTokenAsyncOpenIdConnectParameterNames.AccessToken获取访问令牌 复制AccessToken并

我们正在尝试将Identity Server 4 IDSV4与Mvc客户端和WebApi2客户端集成

我们发现,访问令牌仍然有效,即使用户已从客户端和IDSV4注销,也可以使用它来使用WebApi2提供的服务

我不知道如何在用户注销后立即强制它失效

以下是重现这种行为的步骤:

打开Mvc客户端并登录到IDSV4 使用await HttpContext.GetTokenAsyncOpenIdConnectParameterNames.AccessToken获取访问令牌 复制AccessToken并使用该token访问WebApi2—它可以工作,我们可以看到Api和IDSV4之间的验证步骤

我使用以下命令从IDSV4和客户端注销:

await HttpContext.SignOutAsync("Cookies"); await HttpContext.SignOutAsync("oidc"); 我试图将options.CacheDuration设置为零,但仍然是相同的行为


你能建议我如何阻止它或在用户注销时强制我的Api重新验证吗?是否仍要通知Api,特定令牌不再有效?

无法撤消访问令牌。您可以使用具有不同流的引用令牌,并可以撤销它。这也是您应该生成具有较短生存期的访问令牌的原因。
当您使用https连接时,没有任何方法可以中途窃取访问令牌。

这通常是出于设计。cookie/token的过期时间是多少?它应该是短期的。参考标记+1。只需将令牌内容的API缓存时间设置为与您当前的访问令牌生命周期相同,行为基本相同,而且现在您可以随时在服务器端撤销它们,无论是在正常事件过程中(例如注销),还是在某个事件被破坏的情况下。另外,它们在授权头中通常要小得多。如何从受保护的资源中撤销引用令牌,不是针对给定用户,而是针对任何用户?通过使用RevocationTokenEndpoint->@TTCG是的,但是如何从数据库中获取给定用户的撤销令牌?不是直接存储它们,而是存储它们的SHA512/256哈希?
services.AddAuthentication(

            IdentityServerAuthenticationDefaults.AuthenticationScheme)
            .AddIdentityServerAuthentication(options =>
            {
                options.Authority = "http://idsv.url";
                options.ApiName = "api1";
            });