Как принудительно обновить членство в группе пользователей в Windows 7?

27

Я пишу веб-приложение, которое использует проверку подлинности Windows .NET и полагается на членство пользователя в группе для авторизации их в различных областях веб-сайта. Прямо сейчас я нахожусь на машине разработчика, которая НЕ является частью домена и не использует AD, вместо этого я просто использую локальные группы пользователей. В целом это работает нормально, как есть.

Однако, когда я тестирую приложение, мне нужно добавлять и удалять роли в моей учетной записи, чтобы убедиться, что все работает. Когда я добавляю роль, она не распространяется, пока я не выйду из Windows и не войду снова.

Можно ли принудительно обновить членство в группе без выхода из системы?

kingdango
источник
3
Вы имеете в виду выход из станции или веб-сайт?
Дан
Хороший вопрос, я обновил свой вопрос, чтобы уточнить. Я должен выйти из моей учетной записи пользователя Windows (выйти из окна) и войти снова.
кингданго
Это заставляет системные обновления для членства в группах. После того, как вы снова запустите командную задачу kill explorer, запустите explorer в обычном режиме. у вас также будет новый токен безопасности в вашем новом экземпляре проводника.

Ответы:

25
taskkill.exe /F /IM explorer.exe
runas /user:%USERDOMAIN%\%USERNAME% explorer.exe

Это уничтожит проводник, а затем снова откроет его с вашей учетной записью пользователя ... Он запросит у вас пароль и получит новый токен, тем самым обновив ваше членство.

Мэтт Браун
источник
1
Кажется, это работает, но я обнаружил, что все подключенные подключения дисков разрываются.
SomeGuy
2
у меня не работает в Windows 10 Pro
Дэйв Кузино,
Смотрите также: woshub.com/… . Для компьютера klist -lh 0 -li 0x3e7 purge, для пользователя klist purge. NB: я не пробовал эти команды сам; просто повторяя информацию из связанной статьи.
JohnLBevan
10

Это трудно выполнить в масштабе всей системы, но это возможно с отдельными исполняемыми файлами, убивая их процесс и перезапуская их под учетными данными пользователя.

Когда вы входите в систему, вы получаете токен, отражающий, среди прочего, членство в вашей группе. Единственный способ обновить этот токен - войти в систему.

MDMarra
источник
Если это облом, это немного помешает моему тестированию. Спасибо за понимание ... Я надеюсь, что у другого пользователя есть лучший ответ, но я предполагаю, что по вашей репутации 15k + вы понимаете, о чем говорите.
кингданго
2
@kingdango вы всегда можете использовать runasдля запуска процесса от имени другого пользователя, а не от своего, и манипулировать членством в группе этого тестового пользователя. Каждый раз, когда вы закрываете и перезапускаете процесс, используя runasего, вы должны создавать новый сеанс, который должен отражать измененное членство в группе. Я не проверял это, но в теории это должно работать так.
MDMarra
Это сложно из-за моей среды разработки, но это стоит изучить. Спасибо за быстрый и вдумчивый ответ Марк.
кингданго
4

У меня была похожая ситуация с сайтом, который полагался на членство пользователя в AD, чтобы разрешить вход на сайт. Одна вещь, которую стоит рассмотреть, это сделать, чтобы веб-сервер выполнял аутентификацию / запрос к серверу AD с предоставленными им учетными данными; если веб-сервер имеет доступ к AD и просто запрашивает сервер о том, находится ли пользователь в группе XYZ, он получит список прямо из AD, а не с токена входа пользователя, которому для входа в систему требуется вход / выход из системы. токен с соответствующими привилегиями.

Я знаю, что ваш девайс прямо сейчас из описания не имеет такого доступа, но, похоже, вы имеете в виду, что когда вы его развертываете, вам нужна эта функциональность.

Если вы полагаетесь на токен, вам придется выйти и снова войти.

Барт Сильверстрим
источник
Спасибо за вдумчивый ответ. Это один хороший способ решить проблему. В нормальных ситуациях я более чем рад ждать, пока пользователь получит обновленный контроль доступа, даже если это означает, что ему нужно выйти из системы и снова войти в систему на своем компьютере. Это всего лишь тестовый сценарий, где это может быть бременем, но на самом деле это не так уж важно. Честно говоря, мне потребовалось больше времени, чтобы найти ярлык. :-)
кингданго
1
Это может пригодиться и в зависимости от сценария. Если сервер запрашивает контроллер домена напрямую, это означает, что изменения «мигрируют» практически сразу, поэтому, если кто-то получает доступ или отключает доступ, он не занимает цикл входа / выхода клиента. Это немного облегчает работу их ИТ-персонала.
Барт Сильверстрим
3

Существует скриптовый способ сделать это полностью через командную строку; Вы можете использовать KList .

klist purge
Nixphoe
источник
Purging tickets destroys all tickets that you have cached, so use this attribute with caution. It might stop you from being able to authenticate to resources. If this happens, you will have to log off and log on again.[Purge](https://technet.microsoft.com/en-us/library/hh134826.aspx?f=255&MSPPError=-2147217396)Перебирают ли токены хотя? или он просто выбрасывает существующие, оставляя вас ни с чем? Если у вас нет токенов, перезапускает ли проводник (или какой-либо процесс, которому нужен токен), автоматически перехватывает их?
Брэд
Он будет восстанавливать токен при запросе новых ресурсов. Я использовал это довольно часто при попытке обновить группы безопасности для удаленного пользователя и рабочей станции при добавлении членства в группах к их объектам AD.
Nixphoe
о, хорошо (и, черт возьми, я испортил форматирование в этом комментарии .... вы поняли)
Брэд
-2
  • Открыть диспетчер задач
  • Убить Explorer.exe (каждый)
  • Нажмите Файл> Новая задача (Выполнить ...)
  • Введите CMD
  • В командной строке введите «RunAs / user: \ explorer.exe».

Выполнено.

flip66
источник
2
Без ошибок. Пожалуйста, прочитайте вопрос.
HopelessN00b
4
@ HopelessN00b Это похоже на то, что это в основном то, что стало принятым ответом.
Брэд
1
@Brad Что не имеет никакого отношения к тому, правильно это или неправильно. М.Д. Марра прав (как и Барт), это (и принятый ответ) неверны. Этот процесс не заставляет систему обновлять членство в группах.
HopelessN00b
1
@ HopelessN00b ты прав, как я узнал позже в тот же день. Перезагрузка была единственным способом обновить членство. К сожалению, оба ответа неверны.
Брэд
1
Выйдите из системы и вернитесь обратно, сделайте свое дело, перезагрузка не требуется. Членство в группах применяется при входе в систему.
Чарли Уилсон