Спасибо за чтение и за ваши мысли; это проблема волосатости, поэтому я решил поделиться, чтобы узнать, действительно ли это серьезный вызов для более опытных разработчиков, чем мы сами.
Мы разрабатываем веб-приложение для корпоративной среды Microsoft Active Directory и используем проверку подлинности Windows, предоставляемую IIS, для проверки подлинности пользователей для единого входа, а также проверки подлинности с помощью форм. Я знаю, что IIS жалуется, когда оба включены, но он работает очень хорошо, и у каждого сайта, на котором мы развернули, не было никаких странных ухищрений - до сих пор.
Новый сайт имеет «общие» компьютеры, которые постоянно входят в систему с общей учетной записью, которая имеет доступ только для чтения к приложениям, которые им необходимо использовать. Это означает, что мы не можем различать пользователей, которые должны иметь разные разрешения для приложения; нам нужен какой-то способ запроса пользователя для аутентификации.
Первая попытка была серьезным поиском в интернете; ни у кого в мире, похоже, не было нашей проблемы, кроме нескольких заблудших душ, которые задавали вопросы в эфир и не получали ответа.
После небольшого мозгового штурма и выяснения способа работы аутентификации IIS казалось, что наиболее простым способом решения проблемы является выдача 401 Unauthorized
в ответ на пользователя, известного как общая учетная запись. Начальные тесты здесь казались плодотворными, что привело к успешным изменениям имени пользователя в браузере, однако прототип на сайте не запрашивал учетные данные, и браузер сохранял те же данные учетной записи. Мы также попали в специфичный для IE javascript
document.execCommand("ClearAuthenticationCache")
, который, опять же, работал в лаборатории, но не на месте. Дальнейшие эксперименты с настройками безопасности IE на месте показали, что браузер автоматически проведет повторную аутентификацию, если сайт веб-приложения будет исключен из зоны интрасети, независимо от метода, используемого для обмана браузера, запрашивая у пользователя новые данные учетной записи.
Теперь мы застряли. У нас есть варианты обхода проблемы, но они определенно не «правильные» ответы:
- требует, чтобы пользователи вышли из общей учетной записи, прежде чем войти в наше приложение (... блин)
- исключить наше веб-приложение из зоны интрасети на всех машинах
- предоставляет пользователям возможность входа в систему без единого входа
Я убежден, что есть канонический способ сделать это - известный паттерн, общая базовая проблема, которая уже решена, что-то в этом роде - и мне очень интересно услышать, какие изобретательские методы существуют для решения такого рода проблемы, и если кто-то еще когда-либо действительно испытывал что-то вроде этого.