Подтвердить что ты не робот

AngularJS + ASP.NET Web API + Аутентификация ASP.NET MVC

Я новичок в AngularJS и пытаюсь оценить его для моего нового веб-приложения.

Требование:

У меня будет один веб-API ASP.NET, который будет потребляться с Android, iPhone и веб-приложения (ASP.NET MVC). Идентификация ASP.NET будет реализована в Web API. Все три приложения вызывают метод входа в Web API для получения токена аутентификации.

Проблема:

Моя проблема заключается в том, как заставить ASP.NET MVC проверять на стороне сервера работу (синхронизироваться с веб-API, поэтому мне не нужно входить в ASP.NET MVC отдельно), а Angular делает вызов для получения HTML-шаблона/вида, файлов JavaScript или других ресурсов. Я просмотрел многие статьи и блоги на AngularJS, но все еще не могу найти модель безопасности, которая соответствует моим требованиям.

Возможное решение:

Было бы неплохо сделать запрос на вход в приложение ASP.NET MVC напрямую, а не в веб-API напрямую, и приложение ASP.NET MVC вызовет веб-API для входа в систему и после аутентификации сохранит токен аутентификации в сеансе плюс создать файл FormsAuthentication cookie, а в файлах cookie сохранить зашифрованный токен аутентификации. Кроме того, установите токен auth в ng-init где-нибудь в HTML, чтобы иметь токен в области AngularJS. Теперь, когда AngularJS пытается позвонить в приложение ASP.NET MVC для получения HTML-кода, выполните аутентификацию/авторизацию пользователя путем сопоставления файлов cookie с реестром с данными auth в сеансе. Кроме того, AngularJS отправит токен auth в заголовке для прямого вызова методов веб-API для всех последующих вызовов обработки данных через веб-интерфейс API.

4b9b3361

Ответ 1

Я решил проблему с очень прорывным решением. Я просто убедился, что у меня есть две строки кода в методе Register WebApiConfig:

config.SuppressDefaultHostAuthentication();
config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType));

Что это. Теперь мои контроллеры MVC ищут cookie сеанса для авторизации, тогда как мои контроллеры Web API ищут токен auth в заголовке каждого запроса. Кроме того, веб-API отправляет маркер (JSON) и сам cookie сеанса в ответ на запрос входа/аутентификации, например. http:\\www.mydomain.com\token.

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

Ответ 3

Я думаю, что ты на правильном пути. Я бы сохранил токены в службе Angular, чтобы облегчить себе (http://blog.brunoscopelliti.com/deal-with-users-authentication-in-an-angularjs-web-app). Я немного смущен тем, что вы подразумеваете под "AngularJS пытается сделать вызов ASP.NET MVC-приложения для получения HTML", вам не нужно защищать приложение MVC, он просто запускает ваш Angular правильно? API - это часть, которую вы хотите защитить.