Какие бывают типы окон для токенов и чем они отличаются? - PullRequest
1 голос
/ 05 февраля 2012

Недавно я имел дело с Windows LogonUser API. API LogonUser возвращает разные токены в зависимости от dwLogonType, переданного в API. В документе упоминается:

• Функция возвращает токен олицетворения, а не первичный токен. Вы не может использовать этот токен непосредственно в функции CreateProcessAsUser. Однако вы можете вызвать функцию DuplicateTokenEx для преобразования токен первичному токену, а затем используйте его в CreateProcessAsUser.

• Если вы конвертируете токен в основной токен и используете его в CreateProcessAsUser, чтобы запустить процесс, новый процесс не может получить доступ другие сетевые ресурсы, такие как удаленные серверы или принтеры, через редиректор. Исключением является то, что если сетевой ресурс не контролируемый доступ, тогда новый процесс сможет получить к нему доступ.

Я совершенно запутался в разных типах токенов. Я хочу понять, что такое разные типы токенов Windows и чем они отличаются?

1 Ответ

2 голосов
/ 05 февраля 2012

Исторически говоря (как 17 лет назад):

Если процесс, работающий на сервере B, когда пользователь U хочет подключиться к серверу C как тот же пользователь, то протокол аутентификации между серверами требует, чтобы сервер Bзнает пароль пользователя U.

Если пользователь U вошел в систему на сервере B, это не проблема (пользователь должен был ввести пароль).

Однако предположим, что пользователь U являетсяфактически вошел в систему на клиенте A и подключается к серверу B (который может быть, скажем, почтовым сервером).Затем сервер B может безопасно определить, что он действительно подключается пользователем U, но сервер B никогда не видит пароль U, поэтому он не может подключиться к серверу C от имени U.

Это различие естественно создает два вида пользовательских токенов:

  • Основной токен, представляющий пользователя, который "действительно" вошел в систему и может подключаться к другим сетевым ресурсам.
  • Маркер олицетворения, представляющий аутентифицированного пользователя, который фактически вошел в систему на другом компьютере, тактокен нельзя использовать для доступа к другим сетевым ресурсам (поскольку ОС не знает пароля, а это требуется протоколом межсерверной аутентификации).

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

Возвращаясь к вашему вопросу, упомянутые вами ограничения применяются, только если вы спроситеза LOGON32_LOGON_NETWORKмаркер.Как говорится в документации, это быстрый вход для сетевых серверов, которым не требуется доступ к другим сетевым ресурсам;если вам нужен такой доступ, выберите другой тип входа.

Для дальнейшего чтения эта статья устарела, но охватывает различные варианты олицетворения и делегирования.

...