Ответ 1
Итак, вместо того, чтобы пытаться найти пример, я создал один вместо него (ссылка внизу). Чтобы объяснить, как работает функциональность, я хочу рассмотреть несколько вещей:
-
Новая система идентификации ASP.NET предоставляет реализацию токена-носителя OAuth 2.0, которая может использоваться с клиентами, которые потребляют ресурс веб-API через HTTP. Поскольку аутентификация не сохраняется в cookie сеанса, сервер не отвечает за поддержание состояния аутентификации. Побочным эффектом является то, что потребитель должен управлять аутентификацией сервера и управлением возвращенным маркером. Это система, которую Microsoft использует в шаблоне SPA, который предоставляет VS 2013.
-
AngularJS не делает никаких предположений об аутентификации, поэтому вам нужно пройти аутентификацию.
-
AngularJS предоставляет службу
$http
для запросов на удаленные службы на основе HTTP, а также$resource
, которая построена поверх$http
. Используя заголовкиAuthorization
с реализацией маркера Bearer выше, вы можете объединить оба для обеспечения аутентифицированного доступа к ресурсам сервера через HTTP. AngularJS позволяет установить заголовок 'default'Authorization
, который он будет использовать в каждой последующей транзакции HTTP.
С учетом этого, как я это сделал, создав службу пользователя, которая обрабатывает все данные аутентификации, включая настройку заголовка HTTP Authorization
, между сервером веб-API и SPA. На основе состояния аутентификации пользователя вы можете скрыть определенные элементы пользовательского интерфейса, чтобы предотвратить навигацию. Однако, если вы также определяете состояние как требование аутентификации как свойство объекта resolve
для состояния, наблюдатель, установленный в событии $stateChangeError
, будет отображать ошибку и перенаправлять пользователя в форму входа. После правильной проверки подлинности он перенаправляет пользователя в состояние, к которому они пытались перейти.
Чтобы предотвратить потерю аутентификации между сеансами браузера (поскольку клиент несет ответственность за сохранение токена аутентификации, а этот токен поддерживается в памяти), я также добавил возможность для пользователя сохранять аутентификацию в файле cookie, Все это прозрачно для пользователя. Для них он практически идентичен традиционной аутентификации, основанной на формах и сеансах.
Я не уверен, почему вы хотите, чтобы пользователь не видел маршруты, но я закодировал его как таковой. Я имею в виду пример Sedushi Plunker того, как использовать AngularUI Router для навигации в автономном режиме без использования URL-адресов. Тем не менее, я не уверен, что могу лично рекомендовать это для любого приложения, которое я написал бы самостоятельно.
Полное решение (как WebAPI, так и WebUI) доступно с пошаговыми инструкциями здесь.
Сообщите мне о какой-либо конкретной части, которая неясна, и я постараюсь сделать это более ясным в ответе.