WebApi with OWIN SelfHost and Windows Authentication

十年热恋 提交于 2019-11-27 05:53:25

问题


I have a console application SERVER that hosts WebApi controllers using OWIN self-hosting, and runs under a custom account named "ServiceTest1".

In the same machine I have another console application CLIENT that runs under the account "ServiceTest2", and I want to capture in SERVER that "ServiceTest2" invoked a controller action. However:

  • WindowsIdentity.GetCurrent() is always "ServiceTest1".
  • Thread.CurrentPrincipal is an unauthenticated GenericIdentity.
  • RequestContext.Principal is null.
  • User is null.

What do I need to make this WebApi OWIN self-hosted to grab the Windows identity of the caller?


回答1:


Your question is a little unclear on exactly how you've implemented the Windows authentication.

Enable Windows authentication:

public class Startup
{
    public void Configuration(IAppBuilder app)
    {
        HttpListener listener = (HttpListener)app.Properties["System.Net.HttpListener"];
        listener.AuthenticationSchemes = AuthenticationSchemes.IntegratedWindowsAuthentication;

        // ...
    }
}

Get the user in an OWIN middleware:

public async Task Invoke(IDictionary<string, object> env)
{
    OwinContext context = new OwinContext(env);
    WindowsPrincipal user = context.Request.User as WindowsPrincipal;

    //...
}

Get the user in a Web API Controller:

// In a web api controller function
WindowsPrincipal user = RequestContext.Principal as WindowsPrincipal;


来源:https://stackoverflow.com/questions/32080694/webapi-with-owin-selfhost-and-windows-authentication

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!