Социальная регистрация в SPA (Angular 2) с ASP.NET Основной REST API

#angular #asp.net-core #openid-connect #oauth2 #openiddict

#angular #asp.net-ядро #OpenID-подключение #oauth-2.0 #openiddict

Вопрос:

Я реализовал простое приложение Angular 2, которое использует ASP.NET Основной WebAPI в качестве серверной части. Для аутентификации я добавил маршрут «/ login», который генерирует токены доступа и обновления JWT, которые, в свою очередь, хранятся SPA в localStorage и используются в HTTP-запросах.

Теперь я хочу интегрировать функцию социальной регистрации, чтобы пользователи могли входить в систему с помощью кнопки ie Facebook. С точки зрения пользователей я хочу выполнить это в 3 шага:

  1. Нажмите кнопку Зарегистрироваться с помощью Facebook и перенаправлены на веб-сайт Facebook (для входа в систему и подтверждения моего запроса приложения).
  2. Нажал подтвердить и перенаправлен на страницу my SPA where / registration, где его имя уже заполнено из профиля Facebook
  3. Заполняет оставшиеся поля (как его любимая игрушка) и нажимает «Завершить регистрацию»

После этой регистрации, если пользователь снова нажмет кнопку зарегистрироваться через facebook, он будет перенаправлен на facebook (если он уже вошел в систему), он автоматически перенаправляется на серверный маршрут, который проверяет, был ли такой пользователь уже зарегистрирован, и, если это так, перенаправляет его на домашнюю страницу SPA

Как правильно интегрировать такой рабочий процесс в мое приложение? Примечание: я хочу выполнить аутентификацию и регистрацию внутри моего приложения Angular2, а не на другом сервере аутентификации.

Комментарии:

1. обычно аутентификация в OAuth выполняется на сервере поставщика Oauth (например, на серверах Google, facebook). я не понимаю, что вы подразумеваете под тем, что ваше приложение должно выполнять аутентификацию

2. У меня есть собственная аутентификация, выполняемая путем / login. Он использует поток ROPC OAuth2. Я хочу добавить аутентификацию с тридцатью участниками. Это выдача моего собственного токена JWT после авторизации пользователя в стороннем сервисе.

3. я понятия не имею, что такое поток ROPC OAuth :). удачи

4. kevinchalet.com/2016/07/13/…

5. спасибо, я проверю это

Ответ №1:

Я хочу выполнить аутентификацию и регистрацию в моем приложении Angular2.

То, что вы ищете, — это неявное предоставление, с Facebook в качестве сервера авторизации и в качестве сервера ресурсов. Неявный грант поддерживает авторизацию для одностраничных приложений (таких как ваше приложение Angular2), а API Facebook Graph поддерживает запросы на информацию о пользователе.

Как правильно интегрировать такой рабочий процесс в мое приложение?

Поскольку Facebook не поддерживает OpenID Connect, вам нужно будет использовать псевдо-аутентификацию OAuth2 (которой нужно избегать). Это будет включать в себя четырехэтапный процесс:

  1. перенаправить пользователя на Facebook для входа в систему,
  2. подтвердите перенаправление обратно со страницы входа в Facebook и сохраните токен доступа,
  3. вызовите Graph API Facebook, чтобы запросить информацию о пользователе для связанного токена доступа, и
  4. используйте эту информацию о пользователе для заполнения полей в вашем приложении.

Вызов API на третьем шаге может выглядеть примерно так:

 FB.api('/me', (user) => { 
    console.log(user.id); // 101540562372987329832845483
    console.log(user.email); // example@example.com
    console.log(user.first_name); // Bob
});
  

/me это специальная конечная точка Graph API, которая «преобразуется в user_id пользователя, токен доступа которого в настоящее время используется для выполнения вызовов API». Затем конечная точка возвращает соответствующую информацию о пользователе.

Ваше приложение может использовать эту информацию о пользователе Facebook для заполнения своих клиентских полей и / или серверной базы данных. Это id уникальный для вашего приложения и НЕ эквивалентный Facebook user_id ; id это разумный способ уникальной идентификации пользователей вашего приложения.

Четыре варианта правильной интеграции этого потока в ваше приложение.

В сторону: что вы подразумеваете под псевдо-аутентификацией OAuth2?

OAuth2 — это схема псевдо-аутентификации, поскольку OAuth2 НЕ является протоколом аутентификации.То есть после входа пользователя в систему ваше клиентское приложение получает токен доступа, который оно использует для выполнения запроса защищенного API. Чтобы избежать подводных камней, полезно знать о них:

  1. Токены доступа НЕ являются доказательством аутентификации.
  2. Доступ к защищенному API НЕ является доказательством аутентификации.
  3. Злоумышленники могут вводить токены доступа.
  4. Токены доступа НЕ имеют ограничения аудитории.
  5. Злоумышленники могут вводить неверную информацию о пользователе.
  6. У каждого поставщика удостоверений может быть свой собственный протокол идентификации.

Комментарии:

1. Большое вам спасибо за ответ! Можете ли вы сказать, должен ли я использовать OpenIddict или ASOS для реализации этой стратегии или лучше избегать их и делать САМОСТОЯТЕЛЬНО? Могу ли я после этого использовать ROPC для входа в систему клиентов, зарегистрированных без Facebook?

2. Токены доступа НЕ являются доказательством аутентификации — так что же такое prof аутентификации?

3. @Rem Протокол OAuth может быть составной частью протокола аутентификации. Именно это и сделал Facebook — он построил свой собственный протокол идентификации поверх OAuth. Это зависит от разработчика, в данном случае Facebook, реализовать это должным образом, потому что OAuth не гарантирует аутентификацию. Как правило, мы можем быть уверены, что Facebook сделал это правильно, и в этом случае доказательством аутентификации является доступ к защищенному ресурсу Facebook.

4. Если бы вы использовали OpenIddict для реализации этой стратегии, то вы бы использовали предоставление кода вместо неявного предоставления. Судя по вашему вопросу, похоже, что вы предпочли бы использовать неявное предоставление, и это кажется разумным, потому что Facebook поддерживает его. Если бы это был мой сайт, я бы, вероятно, использовал неявный поток и лучшие практики Facebook (т. Е. Вход с помощью кнопки Facebook их SDK).

5. хорошо! Спасибо, Шон, за ответ и за отличный образец Aurelia 🙂

Ответ №2:

Я бы просто предложил это для auth0 A2.

Комментарии:

1. Мой вопрос касается программирования, но не рекомендаций по покупке