Идентификация ASP.Net с использованием настраиваемого поставщика/службы auth

В настоящее время я разрабатываю веб-приложение ASP.Net MVC, которое требует аутентификации имени пользователя и пароля. Я начал изучать использование идентификатора ASP.Net для этого, однако у меня есть очень важное требование, требование состоит в том, что сам веб-приложение не имеет прямого доступа к каким-либо базам данных, все доступ к БД должен быть открыт для приложения через внутреннюю службу REST, Это связано с соблюдением определенных правил безопасности.

Я понимаю, что идентификатор ASP.Net способен поддерживать внешние методы проверки подлинности, но мой вопрос разбит на 2 части.

1) Как настроить идентификатор ASP.Net для использования моей службы REST для аутентификации?

2) Как мне приступить к разработке службы, которая может использоваться Identity для аутентификации? (что нужно будет вернуть из службы в Identity ASP.Net)

Любая помощь по этому поводу была бы наиболее оценена.

Ответ 1

Я просто сделал то, о чем вы просите. Во-первых, как предположил FPar, вам нужно реализовать IUserStore и передать его в UserManager. Ваш пользовательский IUserStore будет реализовывать интерфейс, я использовал Resharper для создания заглушек, но вместо того, чтобы использовать сущность framework, вы будете использовать HttpClient для совершения звонков на вашу службу REST.

Служба REST будет иметь одно действие на контроллере, я назвал свой идентификационный контроллер, для каждого из методов интерфейса, которые вам действительно нужны. Я реализовал userstore, userloginstore и rolestore, с кодом для примерно 10 вызовов, которые я фактически использовал. Тогда идентификатор-контроллер фактически обращается к базе данных.

Я также сохранил полностью асинхронный шаблон, используя асинхронные вызовы REST и внешний вид базы данных, как с картой сущностей, так и без нее. Сокращенная версия моего кода доступа к данным находится в другом вопросе здесь, в отношении IUserLoginStore:: AddLoginAsync. В этом классе я фактически использовал оригинальную реализацию сущностной реализации хранилища пользователей для части работы и, в конечном итоге, установил простой (за исключением async) ado.net для частей, которые я не мог сделать так. Таблицы достаточно просты, использование ORM по выбору не займет много времени.

Удачи!

Ответ 2

Вы хотите реализовать свой собственный IUserStore, а затем передать ссылку на UserManager. Просмотрите файлы Startup и IdentityConfig в стандартном ASP.NET MVC с индивидуальной аутентификацией учетной записи пользователя, чтобы увидеть, как их использовать.

Вы можете посмотреть здесь для реализации IUserStore с сущностью. Это шаблон, с которого вы можете начать и изменить его в соответствии с вашими потребностями. Однако вам не нужно реализовывать все интерфейсы, просто реализуйте интерфейсы, которые вам действительно нужны. UserManager способен справиться с этим (он выдает исключение, если вы вызываете метод, для которого требуется интерфейс, который вы не реализуете.)