Как получить токен доступа пользователя в процессе вызова - PullRequest
1 голос
/ 14 сентября 2011

Как я могу получить токен доступа для пользователя, который создал процесс, вызвавший мое приложение?

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

P.S. Приложение, которое будет выдавать себя за пользователя, является службой, работающей в системе.

Ответы [ 4 ]

3 голосов
/ 15 сентября 2011

Проверьте MSDN, все это API хорошо документировано. Вы, вероятно, хотите сделать что-то вроде этого:

HANDLE thisToken, thisProcess;

thisProcess = OpenProcess( PROCESS_ALL_ACCESS, FALSE, GetCurrentProcessId() );
OpenProcessToken( thisProcess, TOKEN_ALL_ACCESS, &thisToken );

http://msdn.microsoft.com/en-us/library/aa379295(v=vs.85).aspx

Хотя вы, вероятно, хотите меньше доступа, чем это. Это даст вам токен для текущего процесса.

1 голос
/ 03 июля 2012

Мы искали способ также посмотреть токен доступа пользователя по соображениям безопасности.

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

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

Итак, мы начали искать способ заглянуть в токен доступа пользователя. Первоначально мы не нашли много. Наткнулся на несколько сайтов, на которых разработчики обсуждали, как получить токен пользователя, и несколько сайтов, которые предлагали использовать «whoami» от Microsoft, но это тоже не помогло, поскольку его можно было использовать только для просмотра собственного токена.

Почти сдавшись, однажды я просто погуглил «Средство просмотра Windows Access Token» и был удивлен, обнаружив инструмент под названием Gold Finger для AD, который, помимо нескольких других возможностей анализа безопасности, имел возможность под названием «Access Token Viewer ».

В восторге от находки, схватил меня за руку и выстрелил. Он работал, как заявлено, и позволял нам видеть токен доступа любого пользователя, особенно интересующего нас сотрудника. Жаль только, что он также предлагал такую ​​же возможность в формате API, чтобы наши разработчики могли использовать его для наших собственных приложений.

Тем не менее, это служило нашей цели. С техническими подробностями можно ознакомиться по адресу - Средство просмотра токенов Windows * .

0 голосов
/ 27 сентября 2018

Если ваше приложение является службой, то, скорее всего, оно вызывается через COM или DCOM.

Вашему серверу необходимо выполнить CoGetCallContext для получения интерфейса IServerSecurity, который позволяет ему проверять подлинность клиента и выдавать себя за клиента, если необходимо.

Для получения дополнительной информации см. http://www.drdobbs.com/examining-dcom-security/184416352

(Да, я знаю, что это невероятно старый вопрос ... но серьезно, кто-то должен был понять это раньше.)

0 голосов
/ 15 сентября 2011

Вы можете использовать wcf для связи между клиентом и сервисом.В " Делегирование и олицетворение с WCF " есть

.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...