如何在.net核心中记录授权尝试

时间:2018-02-20 16:24:18

标签: c# asp.net-core .net-core jwt

当我试图访问授权属性下的方法时,我正在尝试写入日志。基本上,我想记录一个人是否使用无效令牌或过期令牌。我正在使用JWT的基本身份验证

services.AddAuthentication(o =>
{
    o.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
    o.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
}).AddJwtBearer(cfg =>
    {
        cfg.RequireHttpsMetadata = false;
        cfg.SaveToken = true;

        cfg.TokenValidationParameters = new TokenValidationParameters()
        {
            ValidAudience = jwtAudience,
            ValidIssuer = jwtIssuer,
            IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(jwtSecurityKey))
        };

    });

有没有办法可以在授权检查中添加一段代码,如果授权尝试有效,为什么不是?

1 个答案:

答案 0 :(得分:5)

您可以访问JwtBearerEvents对象,该对象定义了在处理承载令牌时引发的许多事件。

OnAuthenticationFailed
如果在请求处理期间抛出异常,则调用此方法。除非被禁止,否则将在此事件之后重新抛出异常。

OnChallenge 在将质询发送回调用者之前调用。

OnMessageReceived
首次收到协议消息时调用。

OnTokenValidated
在安全令牌通过验证并生成了ClaimsIdentity之后调用。

https://docs.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.authentication.jwtbearer.jwtbearerevents?view=aspnetcore-2.0

在AddJwtBearer初始化配置时,添加您要订阅的事件,

.AddJwtBearer(o =>
{
    o.Events = new JwtBearerEvents()
    {
        OnAuthenticationFailed = c =>
        {
            // do some logging or whatever...
        }

    };
});

查看源代码,了解何时可能会引发事件,

https://github.com/aspnet/Security/blob/dev/src/Microsoft.AspNetCore.Authentication.JwtBearer/JwtBearerHandler.cs

相关问题