【发布时间】:2018-07-20 22:07:59
【问题描述】:
我正在为我的 asp.net 核心 API 使用 IdentityServer 4(带有 sql 存储)。我想在数据库中的某处添加一个“上次访问”字段,该字段可用于在用户搜索端点中订购我的一种用户类型。理想情况下,这将显示他们上次在系统中执行操作的时间。
如果我在登录方法中执行此操作,它将不准确,因为它只会在最初生成令牌时更新。我可以为用户访问的每个端点添加一个方法,但这感觉不是正确的解决方案,因为它会重复我自己。
维护记录用户最后一次访问系统的数据库字段的正确位置和方法是什么?
【问题讨论】:
-
为什么不在令牌刷新/验证端点上做呢?无论如何,访问令牌应该是短暂的(不到一个小时,最好是 5 到 10 分钟)
-
如何将代码添加到 IdentityServer4 刷新端点?身份服务器和 api 在不同的项目中,我不负责初始 IDS4 设置,但我看不到任何更新端点,我认为这是 IDS4 自动添加的。
-
IDS4 公开了您可以为其实现处理程序的事件,因此可能值得研究一下。 EF 还支持“触发器”,允许您通过事件回调响应对特定实体的更改。我们在这两件事的背后实现了一个完整的审计日志解决方案,并将我们自己的许多事件添加到各种自定义位和 UI 中的登录
-
@mackie 太好了,我之前没有在文档中看到这些事件,但我只是找到了它们。我添加了自定义中间件,它在所有经过身份验证的请求上写入时间戳,但使用事件将是更高效的解决方案。谢谢
-
为了避免必须在每个请求时写入数据库,您还可以更新内存中用户的时间戳,并且每次只将其写回数据库过一会儿。
标签: c# asp.net-core entity-framework-core identityserver4