Я пишу веб-приложение, которое использует .NET Windows Authentication и полагается на членство в группе пользователей для авторизации их в различных областях веб-сайта. Прямо сейчас я нахожусь на машине разработчика, которая НЕ ЯВЛЯЕТСЯ частью домена и не использует AD, вместо этого я просто использую локальные группы пользователей. В общем, все работает нормально как есть.
Однако, когда я тестирую приложение, мне нужно добавлять и удалять роли в моей учетной записи, чтобы убедиться, что все работает. Когда я добавляю роль, кажется, что она не распространяется, пока я не выйду из Windows и не войду снова.
Можно ли принудительно обновить членство в группе без выхода из системы?
taskkill.exe /F /IM explorer.exe
runas /user:%USERDOMAIN%\%USERNAME% explorer.exe
Это убьет проводника, затем снова откроется с вашей учетной записью ... Он предложит вам ввести пароль и даст вам новый токен, тем самым обновив ваше членство.
Это сложно выполнить в масштабе всей системы, но возможно с отдельными исполняемыми файлами, уничтожив их процесс и перезапустив их под учетными данными пользователя.
Когда вы входите в систему, вы, среди прочего, получаете токен, отражающий ваше членство в группе. Единственный способ обновить этот токен - войти в систему.
У меня была аналогичная ситуация с веб-сайтом, который полагался на членство пользователя в AD, чтобы разрешить вход на сайт. Одна вещь, которую следует рассмотреть, - это заставить веб-сервер выполнить аутентификацию / запрос к серверу AD с предоставленными им учетными данными; если веб-сервер имеет доступ к AD и просто запрашивает у сервера, входит ли пользователь в группу XYZ, они получат список прямо из AD, а не из токена входа пользователя, который требует входа / выхода для получения нового токен с соответствующими привилегиями.
Я знаю, что ваша машина разработчика прямо сейчас из описания не имеет этого доступа, но похоже, что вы имеете в виду, что когда вы ее развертываете, вам нужна эта функция.
Если вы полагаетесь на токен, вам придется выйти и снова войти.
Существует сценарий, позволяющий сделать это полностью через командную строку; ты можешь использовать klist.
klist purge
Готово.