【发布时间】:2019-08-03 03:11:58
【问题描述】:
我有一个 Identity Server 4 的实现,它使用 Entity Framework Core 进行持久存储,使用 ASP.NET Core Identity 进行用户管理。由于此 IDS 将支持公共应用程序,我们被要求添加一种完全阻止用户的方法 - 这意味着不允许他们登录并删除他们现有的登录名。
经过长期研究,我确定 IDS 不支持过期访问令牌之类的东西,因为这不是 OpenID Connect 的一部分。让我感到完全奇怪的是,我将客户端切换为使用引用令牌,这些令牌正确存储在 PersistedGrants 表中,但即使清除该表也不会使未来的请求无效,因为用户仍然通过客户端应用程序和到身份服务器本身。
我可以重新实施任何商店/服务来阻止给定登录用户的所有访问吗?
【问题讨论】:
-
您是如何确定访问令牌不支持过期的? IDS4 问题的开箱即用 JWT 是短期访问令牌,还可以选择获取刷新令牌。另外,如果您使用的是引用令牌,那么受 IDS4 保护的 api 资源需要启用自省,
-
@VidmantasBlazevicius 我不是说访问令牌不会过期,而是你不能强制它们过期
-
啊,很公平,这很有道理,你能解释一下如果你使用引用令牌,这些请求是如何仍然有效的吗?你的客户端和你的api是什么类型的应用程序?
-
@VidmantasBlazevicius 对于第一个测试,我使用带有 OIDC-JS 库的 Angular 客户端针对 2 个 ASP.NET Core API 资源,其中一个托管在 IDS 应用程序中
-
好的,所以你的 Angular 客户端存储了引用令牌并在 api 请求标头中使用它。然后,您的 Api 资源应尝试使用自省端点
/connect/introspect每次自省参考令牌。你能检查 IDS4 日志并验证这是否正在发生吗?如果没有自省端点告诉其有效并将其交换为访问令牌,引用令牌应该是无用的。
标签: c# identityserver4