3

У меня есть консольное приложение SERVER, в котором размещаются контроллеры WebApi с использованием собственного хостинга OWIN и выполняется под пользовательской учетной записью с именем «ServiceTest1».WebApi с OWIN SelfHost и Windows Authentication

В том же компьютере у меня есть другое консольное приложение CLIENT, которое выполняется под учетной записью «ServiceTest2», и я хочу захватить в SERVER, что «ServiceTest2» вызвал действие контроллера. Однако:

  • WindowsIdentity.GetCurrent() всегда «ServiceTest1».
  • Thread.CurrentPrincipal является неаутентифицированным GenericIdentity.
  • RequestContext.Principal есть null.
  • User есть null.

Что мне нужно, чтобы сделать этот WebApi OWIN самообслуживанием, чтобы захватить идентификатор Windows вызывающего?

ответ

12

Ваш вопрос немного неясен о том, как вы реализовали проверку подлинности 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; 
+0

Что, что 'окр 'параметр? У меня есть обычные контроллеры WebApi, которые наследуются от ApiController. – vtortola

+0

А, я прочитал ваш вопрос как желающий использовать метод OWIN для захвата личности. Я также отредактировал свой ответ с версией веб-API. – Zephyr

+0

'RequestContext.Principal' имеет значение null, любая идея почему? – vtortola

Смежные вопросы