IdentityServer 4在登录/刷新令牌时获得时间戳记

alaa_sayegh

我们identity server 4用来保护api /资源。要求之一是跟踪用户活动,这意味着用户最后一次使用api(未登录但已使用)。由于我们拥有30多种api,因此我们认为,一旦令牌针对进行了验证,拦截此验证过程/事件以在数据库中注册最后一个活动日期将更加容易identity server

我的问题是,此验证是否确实在每次用户想要访问api时都在身份服务器级别上进行?

无论如何,有没有要获取此验证时间戳以将其保存在数据库中的某个位置?

谢谢

alaa_sayegh

我自己能够解决这个问题。我对ID-Server事件进行了更深入的研究,找到了一种集中处理事件的好方法。因此,此实现仅在ID-Server项目中。

身份服务器4公开了可用于跟踪用户活动的某种事件(例如:令牌发行成功,令牌发行失败,登录失败等)

有关事件的更多信息,所以此链接

在身份服务器项目中,我添加了IEventSink接口的实现此接口对事件的持久性进行建模,并提供一种方法:PersistAsync

这是cs类:

public class IdentityServerEventSink : IEventSink
{
        private readonly IHttpContextAccessor _httpContextAccessor;
        private readonly UserManager<IdentityUser> _userManager;

        public IdentityServerEventSink(IHttpContextAccessor httpContextAccessor,
                                       UserManager<IdentityUser> userManager)
        {
            _httpContextAccessor = httpContextAccessor;
            _userManager = userManager;
        }

        public async Task PersistAsync(Event @event)
        {
            if (@event.Id.Equals(EventIds.ClientAuthenticationFailure) || @event.Id.Equals(EventIds.TokenIssuedSuccess) || @event.Id.Equals(EventIds.TokenIssuedFailure))
            {
                Identity user = null;

                try
                {
                    user = await _userManager.GetUserAsync(_httpContextAccessor.HttpContext.User);

                    if (user != null)
                    {
                       // do stuff
                    }
                }
                catch (Exception ex)
                {
                  // handle exception
                }
            }
        }
}

通过DI我注入IHttpContextAccessor,因此您需要在服务配置中添加以下行:

services.TryAddSingleton<IHttpContextAccessor, HttpContextAccessor>();

此行将IEventSink实现包含在conatiner中:

services.AddTransient<IEventSink, IdentityServerEventSink>();

希望这可以帮助!

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

IdentityServer4刷新令牌:如何确定到期时间?

来自分类Dev

使用 IdentityServer4 刷新令牌

来自分类Dev

IdentityServer4登录api

来自分类Dev

使用IIS的IdentityServer 4

来自分类Dev

IdentityServer3-登录时的PreAuthenticateAsync

来自分类Dev

IdentityServer3-登录时的PreAuthenticateAsync

来自分类Dev

当 AutomaticChallenge 为 false 时触发 IdentityServer4 登录流程

来自分类Dev

Flurl调用IdentityServer4

来自分类Dev

IdentityServer 3使用刷新令牌刷新用户

来自分类Dev

IdentityServer4 System.ArgumentNullException:值不能为空。参数名称:尝试刷新令牌时的类型

来自分类Dev

试图在单击按钮时获得时间戳记

来自分类Dev

IdentityServer Node.js令牌问题

来自分类Dev

IdentityServer3令牌如何受到保护

来自分类Dev

跳过IdentityServer3登录屏幕

来自分类Dev

登录后不包含IdentityServer附加声明

来自分类Dev

无需Web交互即可登录IdentityServer

来自分类Dev

如何使用IdentityServer3登录?

来自分类Dev

以编程方式登录到identityserver3

来自分类Dev

IdentityServer 和客户端外部登录

来自分类Dev

如何验证从IdentityServer4发布的jwt令牌

来自分类Dev

从IdentityServer4使用令牌访问受保护的.net API

来自分类Dev

在PostgreSQL中获得时间戳记的年份

来自分类Dev

更改IdentityServer 4中的默认终结点

来自分类Dev

错误的请求-请求太长(IdentityServer4)

来自分类Dev

Blazor WASM IdentityServer4注销警报

来自分类Dev

与IdentityServerAuthentication的集成测试IdentityServer4

来自分类Dev

IdentityServer4中的CSRF保护

来自分类Dev

IdentityServer4的接口文档在哪里

来自分类Dev

Aps .net IdentityServer4 授权