Пишу SSPI-аутентификацию, напоролся на странный эффект. Если на клиенте залогинен доменный юзер через remote desktop, то на сервере нормально принимается через SSPI токен пользователя и можно у него опросить юзернейм и домен; но когда я пытаюсь проверить членство этого пользователя в группе (локальной на сервере), в которой этот доменный пользователь на самом деле состоит, мне говорят, что его в группе нет.
Код примерно такой:
sspi.FunctionTable.QuerySecurityContextToken(@hctx, @token); // забрали токен из сформированного контекста SSPI
GetTokenInformation(token, TokenUser, userinfo, cnt, cnt);
LookupAccountSidW(nil,userinfo^.User.Sid, nname, cbnname, domname, cbdomname,peUse);
//...тут для проверки вывожу name и domname...
nname := "имя группы"; //без имени компа (т.к. с именем компа вообще группу не находит)
LookupAccountNameW(NIL, nname, _psid, cbSid, domname, cbdomname, peUse); //получаем SID группы
CheckTokenMembership(token, _psid, ingroup); //проверяем юзера на вшивость
Группа (на которую проверяется) в двух случаях была одна и та же.
Я вроде бы понимаю, что в переданном мне токене какие-то группы могли быть отключены (типа, restricted token), но почему именно моя? И как мне узнать, в этом ли дело? Или может кто-то сразу скажет, чем тут пахнет..
Вообще-то, я впервые столкнулся с безопасностью windows, так что могли быть и какие-то тупые ошибки. В общем, слушаю..
Slicer