我已经配置了一个IdentityServer 4服务器作为一个独立的应用程序,使用net core 3.1、Entity Framework core(针对 MySql)和Net Core Identity作为用户存储。另外还有一个Razor Pages客户端应用程序,它通过身份验证服务器进行身份验证,并在服务器上进行用户登录。所有这些都正常工作。
现在我希望能够为任何新用户身份验证或登录失败在客户端写入日志条目。我假设必须有某个事件被触发。请问我该如何操作?
我已经配置了一个IdentityServer 4服务器作为一个独立的应用程序,使用net core 3.1、Entity Framework core(针对 MySql)和Net Core Identity作为用户存储。另外还有一个Razor Pages客户端应用程序,它通过身份验证服务器进行身份验证,并在服务器上进行用户登录。所有这些都正常工作。
现在我希望能够为任何新用户身份验证或登录失败在客户端写入日志条目。我假设必须有某个事件被触发。请问我该如何操作?
我有同样的需求,例如将身份验证失败存储在审计日志中 - 如果有人尝试使用无效令牌访问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
中,你可以读取 Error
或 ErrorDescription
字符串甚至整个 HttpContext
。