问题 我希望能够使用Node.js进行Windows身份验证.
我知道IIS在ASP.NET中处理Windows身份验证,但我无法弄清楚的是,我如何从node.js获取当前的客户端Windows用户名.我知道它不是通过IIS运行(并且真的不想沿着IISNode路线运行).
必须有一种方法通过Node.js获取客户端的Windows用户名 - 即使我必须编写C++库/服务.
最初的想法是,我可以在ASP.NET中设置一个Web服务,它将使用Windows身份验证,并允许我使用Web请求来获取该用户 - 但这可能太天真了!
我不想向用户询问他们的用户名和密码 - 因为这忽略了重点.
我能看到的任何想法,想法或地点?或者这是不可能的?
注意:这是在一个封闭的Intranet中,Windows身份验证在我们的ASP.NET应用程序中与Active Directory一起使用.
我是NLog的新手,而且设置起来非常简单.
我遇到的问题是设置自定义LayoutRenderer
JsonLayoutRenderer.cs(名称空间:NBT.Logging;在同一解决方案中单独的Project)
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml;
using Newtonsoft.Json.Linq;
using NLog;
using NLog.LayoutRenderers;
namespace NBT.Logging
{
[LayoutRenderer("json")]
public class JsonLayoutRenderer : LayoutRenderer
{
protected override void Append(StringBuilder builder, LogEventInfo logEvent)
{
dynamic logEntry = new JObject();
logEntry.TimeStamp = logEvent.TimeStamp.ToString("yyyy-MM-ddTHH:mm:ss.mmmzzz", CultureInfo.InvariantCulture);
logEntry.TimeStampUTC = logEvent.TimeStamp.ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ss.mmmZ", CultureInfo.InvariantCulture);
logEntry.Level = logEvent.Level.ToString();
logEntry.LoggerName = logEvent.LoggerName;
logEntry.Message = logEvent.FormattedMessage;
foreach(var prop in logEvent.Properties)
{
logEntry[prop.Key.ToString()] = prop.Value.ToString();
}
var json = logEntry.ToString(Formatting.None);
builder.Append(json);
}
}
} …Run Code Online (Sandbox Code Playgroud)