2015-02-21 4 views
1

Я разрабатываю Angular JS SPA для своей компании, которая использует токены-носители для аутентификации пользователей. Используя ASP MCV в качестве задней части, я установил OWIN-промежуточное белье для обработки токенов-носителей на сервере. Мое намерение состоит в создании токенов-носителей для пользователей веб-приложения для блокировки открытых API-интерфейсов. Усложнение заключается в том, что мне нужно создать токен-носитель на основе Doamain \ Username пользователя AD, но для токенов-носителей для работы я не могу включить проверку подлинности Windows. Вход в систему не является вариантом, пользователь должен быть проверен на своих учетных данных AD.Как получить имя пользователя AD, чтобы инициировать аутентификацию токена на предъявителя с помощью angular-js SPA/ASP.NET-MCV

До сих пор, что мне удалось достичь: с проверкой подлинности Windows отключена и анонимной аутентификацией, я получил свой API, чтобы подтвердить запрос, основанный на предъявителя маркера, переданного ему в заголовке. Для этого я создал фиктивного пользователя.

Что мне нужно достичь: Получить имя пользователя AD в виде «ДОМЕН \ имя_пользователя» для пользователя, так что я могу создать маркер носителя, основанный на этом. (до сих пор я могу сделать это только при включенной проверке подлинности Windows)

Проблема, с которой я столкнулся, заключается в том, что я не могу включить проверку подлинности Windows, когда я поместил атрибут [Authorize] в API, он будет проверять на основе проверка подлинности Windows, независимо от допустимого токена на предъявителя или нет.

Возможно, вы думаете, что то, что я пытаюсь сделать, бессмысленно, поскольку у меня есть аутентификация Windows, но мне нужны токены-носители, чтобы API можно было вызывать только из моего SPA для обеспечения безопасности.

До сих пор мне удалось получить идентификатор пользователя, создав API в другом веб-проекте с включенной аутентификацией Windows, однако время загрузки страницы было затронуто, поэтому я хочу избежать этого, чтобы получить идентификатор пользователя.

ответ

1

Наконец-то выдумал, и теперь я могу ответить на свой вопрос.

Я установил проверку подлинности Windows для включен и пользователей олицетворения и анонимную аутентификацию ложной в web.config.

Тогда же в web.config я добавил следующий код внутри configuration узла

<location path="api"> 
    <system.webServer> 
     <security> 
     <authentication> 
      <anonymousAuthentication enabled="true" /> 
      <windowsAuthentication enabled="false" /> 
     </authentication> 
     </security> 
    </system.webServer> 
    </location> 

Это говорит, что для всех вызовов API, которые включают в себя «API» в пути к месту (все мои API, которые требуют аутентификации маркера на предъявителя, имеют префикс маршрута, начинающийся с «api»), отключить аутентификацию Windows и включить анонимную аутентификацию. Имея анонимную аутентификацию, я разрешаю токенам-носителям аутентифицировать вызовы API, а не разрешать окончательную проверку подлинности Windows.

При нахождении идентификатора пользователя с проверкой подлинности Windows, то это должно вызвать API, который не имеет префикс маршрута, начиная с «API», так что в моем случае мой апи «AuthenticateUser» имеет маршрутную префикс

[RoutePrefix("authentication")] 

Интернет.конфигурации не затем отключить проверку подлинности Windows, что позволяет мне получить значение текущего пользователя с помощью

HttpContext.Current.Request.LogonUserIdentity.Name 

Для всех других API, которые нуждаются в авторизации, убедитесь, что они имеют префикс маршрута, начиная с «API и используя [Authorize] атрибут.

EDIT Я должен отметить, что для того, чтобы включить/отключить анонимную проверку подлинности аутентификации и окна, как я сделал в web.config, вы должны сначала дать им возможность быть переопределены в IIS HostFile, в противном случае он выиграл» т работы.

+0

Как вы получаете токен-носитель? – cmedine

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

  • Нет связанных вопросов^_^