Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 通过ASP.NETMVC填充IIS用户名?_C#_Asp.net_Asp.net Mvc_Iis_Iis 7 - Fatal编程技术网

C# 通过ASP.NETMVC填充IIS用户名?

C# 通过ASP.NETMVC填充IIS用户名?,c#,asp.net,asp.net-mvc,iis,iis-7,C#,Asp.net,Asp.net Mvc,Iis,Iis 7,对于我们的系统,我们有各种通过.NETMVC在内部处理的Web API调用。这些是通过使用AuthorizeAttribute的令牌头授权的通用web调用,这意味着我们的IIS日志显示匿名用户。如果可能的话,我们希望填充该用户名。我认为使用IAuthenticationFilter并更新主体可以做到这一点,但生成的IIS日志的用户名为空(匿名)。示例代码如下: public class UserAuthenticateAttribute : Attribute, IAuthenticationF

对于我们的系统,我们有各种通过.NETMVC在内部处理的Web API调用。这些是通过使用AuthorizeAttribute的令牌头授权的通用web调用,这意味着我们的IIS日志显示匿名用户。如果可能的话,我们希望填充该用户名。我认为使用IAuthenticationFilter并更新主体可以做到这一点,但生成的IIS日志的用户名为空(匿名)。示例代码如下:

public class UserAuthenticateAttribute : Attribute, IAuthenticationFilter
{
    public async Task AuthenticateAsync(HttpAuthenticationContext context, CancellationToken cancellationToken)
    {
        //Uses data from within context.ActionContext to populate user data
        context.Principal = new GenericPrincipal(new GenericIdentity("Test User"), null);
    }

    public Task ChallengeAsync(HttpAuthenticationChallengeContext context, CancellationToken cancellationToken)
    {
        return Task.FromResult(0);
    }
    public virtual bool AllowMultiple { get { return false; } }
}

我猜IIS日志是在发送请求时生成的,在AuthenticateTasync接收请求之前生成的。是否有一种方法可以通过IIS日志获取此信息?

IIS将记录应用程序池标识而不是网站标识。

如果在IIS身份验证模式下禁用“匿名身份验证”,则用户必须针对网站进行身份验证。假设我们已启用windows身份验证,IIS将记录网络凭据。

字段:日期时间s-ip cs方法cs uri stem cs uri查询s-port cs用户名c-ip cs(用户代理)cs(参考)sc状态sc子状态 sc-win32-状态时间2020-06-04 07:27:48 fe80::a4fe:6d79:f2b8:d031%6 GET/-8002
VABQIA969VM\Administrator
fe80::a4fe:6d79:f2b8:d031%6 Mozilla/5.0+(Windows+NT+10.0

但是,网站身份是另一回事,它不会记录在IIS日志中。 有关详细信息,请参阅此链接。

为了记录网站身份,我建议您使用Asp.Net内核内置的日志记录机制。




如果有什么我可以帮忙的,请随时告诉我。

IIS将记录应用程序池标识而不是网站标识。

如果您在IIS身份验证模式下禁用“匿名身份验证”,您的用户将必须对网站进行身份验证。假设我们已启用windows身份验证,IIS将记录网络凭据。

字段:日期时间s-ip cs方法cs uri stem cs uri查询s-port cs用户名c-ip cs(用户代理)cs(参考)sc状态sc子状态 sc-win32-状态时间2020-06-04 07:27:48 fe80::a4fe:6d79:f2b8:d031%6 GET/-8002
VABQIA969VM\Administrator
fe80::a4fe:6d79:f2b8:d031%6 Mozilla/5.0+(Windows+NT+10.0

但是,网站身份是另一回事,它不会记录在IIS日志中。 有关详细信息,请参阅此链接。

为了记录网站身份,我建议您使用Asp.Net内核内置的日志记录机制。




如果有什么我可以帮忙的,请随时告诉我。

IIS捕获在集成模式下的模块或IIS模块中的AuthenticateRequest事件上设置的主体名称。要“计划”要在AuthenticateRequest上运行的身份验证中间件。在IIS日志中设置cs用户名的唯一方法似乎是在应用程序处理程序(Global.asax)中设置主体(自定义模块),或者使用一些中间件在适当的时间执行此操作。不幸的是,IAAuthenticationFilter的调用要晚得多


Thread.CurrentPrincipal(应用程序标识)与HttpContext.Current.User(网站标识)同步在AuthenticateRequest之后,请参阅对的注释,这不是用户名未被记录的原因。

IIS捕获主体的名称,该名称在集成模式下的模块或IIS模块中的AuthenticateRequest事件中准确设置为“计划”要在AuthenticateRequest上运行的身份验证中间件。在IIS日志中设置cs用户名的唯一方法似乎是在应用程序处理程序(Global.asax)中设置主体(自定义模块),或者使用一些中间件在适当的时间执行此操作。不幸的是,IAAuthenticationFilter的调用要晚得多

Thread.CurrentPrincipal(应用程序标识)在AuthenticateRequest之后立即与HttpContext.Current.User(网站标识)同步,请参阅对的注释,这不是未记录用户名的原因