У меня есть веб-приложение Asp.Net MVC, которое находится внутри веб-сайта, все еще в значительной степени управляемого delphi
В настоящее время безопасность управляется delphi, который создает файлы cookie.
Было решено аутентифицировать пользователей в приложении ASP.Net, извлекая данные cookie и передавая их в импортированную DLL-библиотеку Delphi, которая возвращает значение true или false в зависимости от того, является ли пользователь действительным.
Я планировал использовать проверку подлинности с помощью форм, но вместо того, чтобы перенаправлять пользователя на форму, вместо этого вызвать обертку delphi и, в случае успеха, перенаправить пользователя на исходный URL-адрес. Это дает преимущество, заключающееся в том, что при переносе безопасности на .Net инфраструктура аутентификации уже будет существовать, просто потребуется изменить реализацию.
public ActionResult LogOn(SecurityCookies model, string returnUrl)
{
try
{
if (model != null)
{
Log.DebugFormat("User login: Id:{0}, Key:{1}", model.UserId, model.Key);
if (authenticator.UserValid(model.UserId, model.Key, 0))
{
FormsService.SignIn(model.UserId, false);
return Redirect(returnUrl);
}
}
...
Обратите внимание, что SecurityCookies генерируются пользовательским классом привязки из файла cookie, сгенерированного delphi - это хорошо работает.
Звонок в DLL Delphi также работает нормально.
Проблема, которую я должен преодолеть, заключается в том, что почти все вызовы приложения .Net являются запросами ajax.
Однако, когда пользователь не вошел в систему, браузер делает 3 вызова из-за перенаправлений:
1) Оригинальный запрос ajax
2) Перенаправить в ~ / Account / Logon (код выше)
3) Перенаправить обратно на исходный запрос ajax
Хотя отслеживание ответов, отправленных обратно клиенту, показывает, что на шаге 3 возвращаются правильные данные, в целом процесс завершается неудачей по еще не определенной причине.
Простое нажатие кнопки «Обновить» на клиенте работает, потому что теперь пользователь проходит проверку подлинности, а перенаправление в ~ / account / Logon не происходит.
Обратите внимание, что мой клиентский код jQuery выглядит следующим образом:
$ .getJSON (requestString, function (data) {
// сделать что-то с данными
});
Есть ли способ изменить процесс проверки подлинности с помощью форм, чтобы вместо перенаправления на URL-адрес, когда пользователь не прошел проверку подлинности, вместо этого я мог запустить другой код? Мне бы хотелось, чтобы аутентификация была полностью невидимой для браузера пользователя.