首页 > 解决方案 > 客户端中的 IdentityServer 4 身份验证事件

问题描述

我将 IdentityServer 4 服务器设置为独立应用程序,使用 net core 3.1、针对 MySql 的 Entity Framework core 和 Net Core Identity 作为用户存储。另外,我有一个 Razor Pages 客户端应用程序,它针对身份服务器进行身份验证,用户登录发生在服务器上。所有这一切都很好。

我现在希望能够在客户端上为任何新用户身份验证或登录失败编写日志条目。我认为必须在某处引发事件。请问我该怎么办?

标签: asp.net-coreidentityserver4razor-pagesasp.net-core-identity

解决方案


我有同样的要求,例如在审计日志中存储身份验证失败 - 如果有人试图使用无效令牌访问 api。

我发现它IdentityServerAuthenticationOptions具有JwtBearerEvents可用于通知此类事件的属性。

就我而言,它是这样工作的:

.AddAuthentication(AUTH_SCHEME).AddIdentityServerAuthentication(AUTH_SCHEME, options => {
    options.ApiName = config.ApiName;
    options.Authority = config.Address;
    options.JwtBearerEvents = new JwtBearerEvents
    {
        OnAuthenticationFailed = c =>
        {
            // Log can bo done here
            return Task.CompletedTask;
        },
        OnTokenValidated = c =>
        {
            // Log can bo done here
            return Task.CompletedTask;
        },
        OnChallenge = c =>
        {
            // Log can bo done here
            return Task.CompletedTask;
        },
        OnForbidden = c =>
        {
            // Log can bo done here
            return Task.CompletedTask;
        }
    };
    options.SupportedTokens = SupportedTokens.Jwt;});

我担心它会覆盖正常的 IS 行为,但一切似乎都像以前一样工作。

您可以在那里访问适当的上下文,例如在JwtBearerChallengeContext您可以读取ErrorErrorDescription字符串甚至整个HttpContext.


推荐阅读