Ответ 1
1. Как мы обрабатываем как зашифрованные, так и нешифрованные сообщения? Мы застряли в одном протоколе, https, со спа?
Вы не придерживаетесь одного протокола. В спа-салоне вы можете использовать ajax для связи через http или https, в зависимости от того, какой вы выберете в любой момент времени. Я бы использовал https в любое время, когда вы отправляете конфиденциальную информацию, например, имя человека или дату рождения или учетные данные для входа.
Как только пользователь войдет на ваш сайт через https, ваш сервер может установить cookie для проверки подлинности для этого пользователя. Этот файл cookie должен быть зашифрованным значением, которое связывает их сеанс с сервером. Вы должны знать, что, если остальная часть вашего сайта использует http, вы рискуете, что этот файл cookie передается по проводу простым текстом. Несмотря на то, что содержимое файла cookie можно зашифровать, используя алгоритм шифрования по вашему выбору, злоумышленник может украсть этот файл cookie и разблокировать сеанс пользователя.
Это может не быть большой проблемой для вас, хотя, если им разрешено просматривать сайт и создавать корзину покупок. Как только пользователь будет готов к проверке, вы должны повторно аутентифицировать пользователя, по https, как своего рода двойную проверку, чтобы убедиться, что они не являются злонамеренным пользователем. Amazon делает это.
2. Какую аутентификацию мы должны использовать?
Хорошо, что все зависит от того, какие функции вы хотите, чтобы ваш сайт имел.
OAuth предназначен для просмотра веб-сервисов, которые вы можете разрешить другим сайтам с помощью делегированного доступа. Это означает, что если у вас есть пользователь, который хочет, чтобы другой сайт (сайт x) имел возможность доступа к функциям вашего сайта для своего профиля. Сайт x может перенаправить пользователя на конечную точку oauth на вашем сайте, которая будет аутентифицировать пользователя. Ваша конечная точка oauth спросит у пользователя, будет ли в порядке, чтобы определенные функции были разделены с сайтом x, и если пользователь согласен с токеном, будет сгенерирован. Пользователь передает этот токен на сайт x, где сайт x сделает серверным сервером вызовы на ваш сайт. Сайт x представит токен в вызовах, поэтому вызовы ваших служб будут делегированным вызовом доступа. OAuth - это способ предоставления другим сайтам делегированного доступа к вашим услугам. Надеюсь, я смог объяснить это ясно. Я не всегда хорош в этом.
OpenID не является очень безопасным способом обработки аутентификации, что делает его более удобным, так что пользователям не нужно беспокоиться о регистрации учетной записи на вашем сайте. Поскольку OpenID полностью открыт, вы доверяете другому провайдеру для проверки своих пользователей. Если пользовательский магазин стороннего поставщика скомпрометирован, ваши пользователи также подвергаются риску. Это пример системы ваучеров, в которой вы, в основном, говорите, что я буду доверять тому, кто вы говорите, если вы можете получить доступ к поставщику OpenID.
Другим решением является WS-Federation. WS-Federation - это если у вас несколько сайтов, и вы хотите иметь 1 поставщик аутентификации, которому вы доверяете. Этот поставщик проверки подлинности может быть вашим, и в основном все ваши сайты говорят, что если вы хотите получить доступ к моему сайту, тогда вы должны сначала пройти аутентификацию с помощью моего провайдера проверки подлинности. Этот поставщик аутентификации может жить в отдельном домене и может выбрать любой механизм проверки подлинности, который он выбирает. Вы доверяете, что этот поставщик auth сделает все возможное, чтобы управлять учетными записями пользователей.
WS-Federation может быть чрезмерным, хотя если вы хотите только аутентификацию на своем сайте и не имеете нескольких сайтов. В этом случае я просто рекомендую сделать Аутентификацию форм, и это должно быть достаточно простым для выполнения. Существует множество примеров того, как это сделать, и Microsoft предоставляет множество решений, как это сделать. Вы должны изучить создание пользовательского поставщика членства.
Как только пользователь прошел аутентификацию с вашего сайта, вы должны создать файл cookie для проверки подлинности. Этот файл cookie связывает пользователя с их сеансом на сервере. Это относится ко всем сценариям, перечисленным выше. MVC 4 поддерживает все описанные выше сценарии.
Спасибо, и не стесняйтесь задавать больше вопросов, если я не был достаточно ясен.
** РЕДАКТИРОВАТЬ 12/1/2017 ** Возвращаясь к этому вопросу спустя годы, я узнал, что полагаться на файлы cookie для API на основе REST - это не очень хорошая идея. Вы не хотите создавать сеанс в своем веб-приложении, потому что это затрудняет масштабирование приложения. Итак, если вам нужна аутентификация, используйте HTTPS с некоторой формой аутентификации (BASIC, DIGEST, Token Based и т.д.). Таким образом, ваше приложение SPA-клиента будет устанавливать заголовок авторизации для каждого HTTP-запроса, а затем ваше приложение веб-сервера будет повторно аутентифицировать каждый запрос.