У меня есть одностраничное приложение, которое использует стандартный контроллер (не ApiController) для получения всех представлений HTML, что выполняется через ajax. Однако WebApi используется с помощью breezejs, чтобы клиент мог общаться с серверной базой данных. Я реализую безопасность идентификации ASP.NET. Следует ли мне использовать аутентификацию файлов cookie MVC или токен носителя? Мне нужно решение, чтобы проиллюстрировать отдельную страницу входа в систему, и мне нужно чистое перенаправление на стороне сервера.
Одностраничное приложение с использованием контроллера — как защитить с помощью ASP.NET Identity?
Ответы (1)
Отказ от ответственности
Это относительно тривиальный вопрос, потому что он очень специфичен, и, понимая разницу в аутентификации между веб-API и контроллерами MVC, это должно быть довольно прямолинейно.
Предположения
- Ваш проект веб-API имеет собственную аутентификацию и не взаимодействует с проектом MVC, чтобы получить пользователя сеанса или что-то еще.
- Ваши контроллеры ASP.NET MVC находятся в проекте, использующем проверку подлинности с помощью форм и сохраняющем пользователя в файле cookie сеанса.
- Когда я ссылаюсь на MVC ниже, вы понимаете, что это ссылка на ASP.NET MVC.
Рекомендация
Я бы хотел, чтобы ваш проект MVC использовал OAuth для аутентификации и сохранял пользователя в файле cookie в сеансе, который вы можете установить и получить. Затем действия вашего контроллера, обслуживающие представления, можно украсить атрибутом Authorize. Это перенаправит пользователей на страницу входа, когда они попытаются получить доступ к представлению, к которому им не разрешено (если это настроено в вашем файле web.config).
Для проекта веб-API вы не можете полагаться на сеанс, потому что это звучит так, как будто вы разделяете два проекта. Это моя рекомендация -
Когда ваш пользователь успешно аутентифицирован в вашем проекте MVC, сделайте запрос к веб-API для открытого метода входа в систему. Это выполнит логический тест, а затем либо сохранит пользователя в БД с каким-либо токеном сеанса, либо автоматически запишет пользователя в БД.
Теперь ваш пользователь, который хранится в сеансе в вашем проекте MVC, вы можете передать его клиенту и добавить его к вызовам Breeze к вашему веб-API и использовать его для аутентификации. Вам нужно будет явно указать, как долго этот токен и тому подобное, но довольно легко добавить это к вызову Breeze.js следующим образом:
var query = breeze.EntityQuery.from('myService').withParameters({'tokenId': thisTokenId});
Теперь ваши запросы будут попадать в API с параметром tokenId, который он может использовать для аутентификации.
Изменить
Если вы хотите настроить свой проект ASP.NET MVC для использования OAuth, вы можете перейти по этой ссылке -
http://www.asp.net/mvc/tutorials/security/using-oauth-providers-with-mvc
Помните, что аутентификация на основе форм просто означает (в двух словах), что вы предоставите пользователю какой-то способ входа в систему с помощью какой-то формы.