У нас есть веб-сайт ASP.NET/MVC, использующий FormsAuthentication. Как обычно, когда пользователь пытается получить доступ к странице и не имеет действительного файла cookie FormsAuthentication, IIS перенаправляет его в представление входа. Когда пользователь выполняет HttpPost для контроллера входа в систему, действие нашего контроллера вызывает нашу веб-службу WebApi, которая проверяет имя пользователя, пароль и идентификатор клиента в базе данных Sql Server. Если проверка подлинности проходит успешно, действие контроллера устанавливает файл cookie FormsAuthentication и перенаправляет на запрошенную пользователем страницу.
Теперь в отделе продаж шумят о «едином входе», хотя я не совсем понимаю, что они под этим подразумевают. Из того, что я читал, в мире Microsoft это обычно означает доступ к службам MS Active Directory Federation Services.
На данный момент я почти не представляю, как это будет работать, но прежде чем я углублюсь в это слишком глубоко, можно ли поместить код аутентификации в веб-службу WebApi, где мы могли бы выбрать проверку по базе данных Sql Server или по какой сервер ADFS подходит для указанного клиента?
Наша проблема в том, что у нас не знаю сколько тысяч пользователей, работающих на какие-то сотни клиентов. У многих клиентов не будет запущена служба ADFS, а у тех, у кого она есть, будет свой собственный сервер ADFS.
Большая часть того, что я вижу в отношении единого входа, похоже, связана с перенаправлением браузера на сервер ADFS, затем перенаправлением обратно и, похоже, вообще избеганием входа в систему, если вы уже вошли в систему. Я не думаю, что мы может сделать это, в нашем случае. Мы не можем знать, на какой сервер ADFS перенаправляться, пока не попадем в базу данных.
Итак, вопрос - можно ли полностью выполнить аутентификацию ADFS из кода C # в нашем веб-сервисе WebAPI?
(Одно из возможных осложнений — сам веб-сайт не имеет доступа к какой-либо базе данных. Единственным параметром конфигурации в его web.config является базовый URL-адрес веб-службы. Какая бы аутентификация ни происходила, она должна происходить в веб-службе, а не на веб-сайте.)