У меня есть веб-сайт, на котором используется проверка подлинности Windows, которая вызывает API. У API есть атрибут Authorize
:
[Authorize(Roles = @"myrole.local\role")]
Затем API вызывает метод на моем бизнес-уровне, который делает следующее:
string [] directories = Directory.GetDirectories("\\\\server\\folder\\folder2");
При локальном запуске это работает по назначению. Когда мой ИТ-специалист проверяет журналы аудита, он видит, что мой логин получил доступ к этой папке.
Теперь, когда я развертываю свой веб-сайт в нашей среде разработки, он больше не работает (мы получаем ошибку «Доступ запрещен» для этой папки). Мы изучили это и обнаружили, что user
, пытающийся получить доступ к папке, был нашим сервером (что-то вроде server$
), попытался получить доступ к папке и потерпел неудачу.
Итак, мой вопрос: как мне получить доступ к папке с текущим пользователем, который вошел в систему? Я просмотрел это здесь, в Stack Overflow, и вижу, что часто возникает подражание. Я безуспешно пробовал этот пример:
public static List<DirectoryName> GetDirectories(IPrincipal user)
{
string[] directories;
using (WindowsImpersonationContext impersonationContext = ((WindowsIdentity)user.Identity).Impersonate())
{
//Insert your code that runs under the security context of the authenticating user here.
directories = Directory.GetDirectories("\\\\server\\folder\\");
}
}
Мне все еще отказано в доступе.
У меня есть пользователь, который вошел в систему, поэтому я знаю, что могу их «видеть», но папка, к которой я пытаюсь получить доступ, говорит, что это сервер.
Кто-нибудь знает, как это обойти? Я что-то упускаю?
P.S. Я создал веб-сайт с IIS и настроил как API, так и веб-сайт для использования проверки подлинности Windows. (anon = false;
); но все же он говорит, что сервер пытается получить доступ к папке.
P.P.S. В web.config
для API у меня тоже есть эти теги:
<system.web>
<!-- ... -->
<authentication mode="Windows"/>
<authorization>
<allow roles="group.local\group" />
</authorization>
</system.web>
Изменить: Таким образом, мы смогли получить доступ к пути к папке с вошедшим в систему пользователем, но только при переходе на веб-сайт на сервере.
Если мы перейдем на веб-сайт с нашего сервера разработки, мы получим ошибку отказа в доступе. Также нет строки аудита, когда это не удается.
Надеюсь, эта редакция дает больше информации.
<authentication mode="Windows"> <identity impersonate="true" /> </authentication>
. Не думайте, что это сработает с кодом делегирования. - person mxmissile   schedule 19.03.2019ApplicationPool
для использования указанной учетной записи? Никаких хитростей с этим. - person mxmissile   schedule 19.03.2019