首页 > 解决方案 > 如何记录未经授权的访问尝试

问题描述

我有 .Net Core 2.1 应用程序并添加了 JWT 授权

services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
            .AddJwtBearer(o =>
            {
                ...
            });

如何记录尝试访问具有[Authorize]属性的操作?我尝试使用此方法https://stackoverflow.com/a/46963194/7137259并注入我的 Logger,但我的 logger 使用 Entity DB Context,我无法将作用域 Logger 注入到IConfigureNamedOptions. 另外,未经授权时如何返回正常响应?

标签: c#asp.net-core

解决方案


您可以在 JwtBearerEvents 中解析您的范围服务,您也可以在那里修改响应:

.AddJwtBearer(JwtBearerDefaults.AuthenticationScheme, o =>
{
    o.Events = new JwtBearerEvents()
    {
        OnAuthenticationFailed = c =>
        {
            var svc = c.HttpContext.RequestServices.GetRequiredService<IMyService>();
            c.NoResult();
            c.Response.StatusCode = 500;
            c.Response.ContentType = "text/plain";
            c.Response.WriteAsync(c.Exception.ToString()).Wait();
            return Task.CompletedTask;
        }
    };
});

推荐阅读