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.
Ответы
Ответ 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 сеанса отправляется с запросом.
Ответ 2
Также стоит посмотреть:
https://bitbucket.org/david.antaramian/so-21662778-spa-authentication-example/overview
(на основе этот вопрос SO)
Предупреждение: это не для слабонервных...
- Веб-интерфейс ASP.NET 2
- HTML5 + AngularJS + $ngRoute
- Леса NuGet
- Yeoman (Grunt/Bower)
- Owin framework (OAuth 2.0)
- CORS
Ответ 3
Я думаю, что ты на правильном пути. Я бы сохранил токены в службе Angular, чтобы облегчить себе (http://blog.brunoscopelliti.com/deal-with-users-authentication-in-an-angularjs-web-app). Я немного смущен тем, что вы подразумеваете под "AngularJS пытается сделать вызов ASP.NET MVC-приложения для получения HTML", вам не нужно защищать приложение MVC, он просто запускает ваш Angular правильно? API - это часть, которую вы хотите защитить.