Можно ли использовать функцию «олицетворение» со строкой (именем пользователя) вместо intptr? - PullRequest
0 голосов
/ 09 июня 2009

Функция System.Security.Principal.WindowsIdentity.Impersonate принимает параметр System.intptr, который в моей ситуации кажется крайне бесполезным (с моим ограниченным пониманием).

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

Заранее спасибо:)

Ответы [ 4 ]

3 голосов
/ 09 июня 2009

В двух словах, нет. Но вы на правильном пути. Вы должны либо получить пользователя, имитируя вход в систему с помощью LoginUserA (C Win32 Api), либо установить для своего сайта IIS аутентификацию Windows.

В этом случае на вашей странице будет свойство с именем User типа IPrincipal, которое вы затем сможете использовать для запуска от имени этого пользователя. Например (извините, код C #).

IPrincipal p = this.User;
WindowsIdentity id = (WindowsIdentity)p.Identity;
WindowsImpersonationContext wic = id.Impersonate();
try {
    // do stuff as that user
}
finally {
     wic.Undo();
}
1 голос
/ 09 июня 2009

Используете ли вы что-нибудь специфичное для Windows из WindowsPrincipal или это просто удобный способ получить авторизацию / аутентификацию без необходимости управлять пользователями? Если вам нужно работать с Windows, у Serapth есть правильный метод. Если вы просто используете его как удобное хранилище аутентификации / аутентификации, то вам, вероятно, следует написать свой код для взаимодействия с IPrincipal. Затем вы можете внедрить свои собственные реализации IPrincipal с желаемыми значениями в HttpContext.User или Thread.CurrentThread.Principal в зависимости от характера ваших тестов и приложения.

0 голосов
/ 09 июня 2009

Вам не нужно подражать, чтобы проверить членство в роли. Просто используйте конструктор для WindowsIdentity, который принимает UPN (userPrincipalName), созданный из имени пользователя в соответствии с вашими соглашениями UPN, затем создайте WindowsPrincipal из этого удостоверения и используйте IsInRole для проверки членства группа. Это работает в W2K3 и домене Windows 2003, но не при других обстоятельствах.

var userIdentity = new WindowsIdentity( username + "@domain" );
var principal = new WindowsPrincipal( userIdentity );
var inRole = principal.IsInRole( "roleName" );

Вы также можете рассмотреть возможность использования стандартного или настраиваемого поставщика ролей, который позволит вам использовать интерфейс ролей для проверки членства.

0 голосов
/ 09 июня 2009

Токены пользователя (значение, которое представляет IntPtr в Impersonate) представляют больше, чем имя пользователя. Они являются дескриптором внутреннего контекста Windows, который включает информацию о пользователе, токены аутентификации, текущие права безопасности и т. Д. Именно поэтому вы не можете выдать себя за пароли без пароля. Чтобы создать токен, вы должны войти в систему с помощью метода LogonUser .

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

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