IdentityServer4 Управление пользователями с отдельным клиентом MVC (AspNetIdentity) - PullRequest
3 голосов
/ 16 июня 2019

После долгих чтений, проб и ошибок я получил работу моего целевого проекта:

  1. IdentityServer4 (автономно с AspNetIdentity) с базой данных IdentityUser
  2. Клиент MVC (автономно), этоэто интерфейс для пользователей, на данный момент нет ссылки на базу данных
  3. 1-n WebAPI, которые предоставляют функциональность клиенту MVC и имеют собственные базы данных

В настоящее время я используюуже существующей базы данных IdentityUser и укажите IS4 для этой базы данных, добавили роли и заявки вручную для целей тестирования.

Мой вопрос касается наилучшей практики регистрации новых пользователей.

Поскольку клиент MVC являетсяинтерфейс пользователя, здесь должна появиться ссылка на регистрацию пользователя.

Но где технически выполняется регистрация?

  1. Должен ли я сделать это в клиенте MVC (с регистрацией IdentityUser по умолчанию) и указать базу данных на базу данных IS4 или
  2. , если я добавлю функцию регистрации в приложение IS4 дляосвободить клиента MVC от каких-либо зависимостей от базы данных и указать ссылку «регистрация» клиента MVC на эту функцию реестра IS4?

Ответы [ 2 ]

1 голос
/ 18 июня 2019

В основном IdentityServer имеет две обязанности:

  1. Аутентификация пользователя
  2. Авторизовать клиента

Проблема с IdentityServer заключается в том, что пользователь не ограничен одним приложением. Хотя веб-сайт MVC может быть вашим фронтом, IdentityServer не связывает пользователей с определенным приложением. После аутентификации пользователь может получить доступ ко всем приложениям, которые используют IdentityServer в качестве сервера аутентификации.

Так имеет ли смысл регистрировать пользователя на сайте MVC? Вероятно, нет, потому что пользователь также может получить доступ к (будущему) веб-сайту mvc2.

Создатели IdentityServer признали это, поэтому они создали PolicyServer :

Мы считаем, что тесная связь «управления учетными данными и доступом» в Единственное решение - неправильный подход. Эти две проблемы должны быть четко разделены.

Другими словами: аутентификация является частью IdentityServer, авторизация (пользователя) - нет.

Возвращаясь к вопросу, регистрация пользователя должна осуществляться IdentityServer. Потому что это единственное приложение, которое имеет доступ к хранилищу удостоверений. Кроме того, пользователи также могут зарегистрироваться без перенаправления приложением.

Ключ - как управлять авторизацией (пользователя). На самом деле это не часть IdentityServer. Я не буду вдаваться в подробности, поскольку это выходит за рамки вопроса.

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

Добавьте функциональность регистрации в IdentityServer и реализуйте ReturnUrl (как это уже имеет место для входа в систему).

Добавьте ссылку на вашем веб-сайте mvc в функцию регистрации на IdentityServer. Позвольте пользователю зарегистрироваться в IdentityServer, отправьте ссылку для проверки электронной почты, которая отправляет пользователя на страницу входа (сохраняя возвращаемый URL), позволяя пользователю перенаправить обратно на веб-сайт mvc после регистрации и входа в систему.

Как добавить авторизацию для зарегистрированного пользователя - это другой вопрос.

1 голос
/ 17 июня 2019

Я бы не использовал «Управление пользователями» и «Регистрация пользователей» взаимозаменяемо. Управление пользователями намного больше, чем просто регистрация. Но чтобы ответить на ваш вопрос:

Должен ли я сделать это в MVC-клиенте (с IdentityUser по умолчанию Регистрация) и укажите базу данных на базу данных IS4 или

Вы могли бы, и в этом не было бы ничего страшного. Это будет сильно зависеть от ваших бизнес-требований, но чаще всего я видел «Регистрацию пользователя», встроенную в провайдеров идентификации (в данном случае ваш IdentityServer4).

...