IIS日志未显示.NET核心应用程序的“cs-username”字段

9udxz4iz  于 2023-02-16  发布在  .NET
关注(0)|答案(2)|浏览(137)

我有两个现有的应用程序在IIS 8.5中运行,一个是ASP.NET,另一个是.NET核心。ASP.NET应用程序在IIS日志中正确写入cs-username字段,但.NET核心应用程序只显示一个连字符。
我发现了一个article和一个forum post,它们建议在applicationhost.config文件中添加一些xml,但是我没有它所引用的<advancedlogging>分支。
如果解决方案是简单地按照文章,那么有人能解释一下为什么我的配置文件的格式不像他们的那样,以及我应该把建议的xml放在哪里吗?否则,是否有任何人都知道的唯一解决方案?

hgb9j2n6

hgb9j2n61#

我有两个变通方法来记录asp.net核心应用程序和IIS中的用户名。
1.在核心应用中,将用户添加到服务器变量中,然后在IIS中记录自定义字段。这仅在使用进程中托管模型时有效。
在您的应用中添加:

app.UseAuthentication();
app.Use(async (context, next) =>
{
    if (context.User.Identity.IsAuthenticated && context.Features.Get<IServerVariablesFeature>() is IServerVariablesFeature serverVariables)
    {
        serverVariables["AUTH_USER"] = context.User.Identity.Name ?? "?";
        serverVariables["AUTH_TYPE"] = context.User.Identity.AuthenticationType ?? "?";
    }
    await next.Invoke();
});

在IIS站点中转到Logging > Select Fields > Add Field。设置字段名称:身份验证用户,源类型:服务器变量,源:AUTH_USER。接受并应用所有更改。
使用自定义字段会导致IIS使用其他日志文件名。你可能需要更新监视应用程序或脚本才能查看这些文件。
(Name当身份验证服务接受请求,但没有足够的信息显示所有细节时,可以为null。例如,没有soap name属性的SAML请求。我使用?来区分它与日志中的anonymous。)
1.使用W3C Logger middleware。这不会记录到IIS日志文件,但会将cs-username记录到其自己的日志文件中。你需要允许应用程序池对你选择记录到的文件夹具有写入权限。这也意味着你可能会将相同的信息记录两次。

rseugnpd

rseugnpd2#

你在iis中使用匿名认证吗?这应该是cs-username没有显示的原因,如果你在www.example.com核心应用程序中使用windows认证asp.net,你将填充cs-username。
在ASP.NET中,它是IIS处理管道中的ISAPI过滤器。因此,IIS可以访问该信息并将其记录下来。ASP.NET核心应用程序则不是这样。ASPNET核心使用自己的Web服务器(称为kestrel),IIS只是充当代理。从技术上讲,IIS不知道该请求\响应发生了什么。它只是接收请求并向请求者提供响应。

相关问题