我有一个控制台应用程序SERVER,它使用OWIN自托管托管WebApi控制器,并在名为“ServiceTest1”的自定义帐户下运行。
在同一台机器上,我有另一个在“ServiceTest2”帐户下运行的控制台应用程序CLIENT,我想在SERVER中捕获“ServiceTest2”调用控制器操作。但是:
WindowsIdentity.GetCurrent()
始终是“ServiceTest1”。Thread.CurrentPrincipal
是未经身份验证的GenericIdentity
。RequestContext.Principal
为空。User
为空。我需要做什么才能使这个WebApi OWIN自托管以获取呼叫者的Windows身份?
答案 0 :(得分:17)
您的问题对于您如何实施Windows身份验证有点不清楚。
启用Windows身份验证:
public class Startup
{
public void Configuration(IAppBuilder app)
{
HttpListener listener = (HttpListener)app.Properties["System.Net.HttpListener"];
listener.AuthenticationSchemes = AuthenticationSchemes.IntegratedWindowsAuthentication;
// ...
}
}
让用户进入OWIN中间件:
public async Task Invoke(IDictionary<string, object> env)
{
OwinContext context = new OwinContext(env);
WindowsPrincipal user = context.Request.User as WindowsPrincipal;
//...
}
让用户进入Web API控制器:
// In a web api controller function
WindowsPrincipal user = RequestContext.Principal as WindowsPrincipal;