Wednesday, June 27, 2012

ASP.NET Impersonation and Multithreading

    In brief – it doesn’t work by default. Consider the following example. You have a network share on a server that you use to keep large binary files uploaded by users. You probably want to restrict access to this folder as it contains vulnerable information. In this case ASP.NET Impersonation is very handy – we can grant access to the folder to a specific account and then force IIS to execute our code under its identity.


    This all works well when you have only one thread in your ASP.NET application. As soon as you create a new one impersonation drops off in the newly created child thread. I spent couple of hours last week trying a) to find the reason my code wasn’t working and b) to resolve this issue. As I found out all newly created child threads in ASP.NET by default run under the ASP.NET worker process's identity. To change this behaviour we have to explicitly impersonate current identity within the child thread's code.
Here is an example:


    I’m not sure this is the best possible way to resolve the issue but it worked fine for me and I hope it will save others' time too :)

4 comments:

mad-squirrel-me said...

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

Bashir Magomedov said...

Очень приятно. К сожалению, не знаю Вашего имени. В жж писал раньше лет 7 назад, потом переключился на блоггер. На самом деле надо сделать трансляцию в жж, мне уже несколько человек говорило об этом…

mad-squirrel-me said...

Наташа )
да на самом деле отслеживать записи-то не трудно. комментить бы хотелось, не заводя еще одного блога здесь (у меня к тому же еще один закрытый есть на магриб-клаб, еще старше, чем жж). но вот вчера общая френдесса подсказала мне, как написать тут коммент через open id. поэтому я и написала. она же потом и сказала, что в жж вы больше не пишете. так что в общем, все ок, будем тут комментить )) шопаделать )) но на самом деле вы конечно лишаете народ удовольствия, у вас классные записи. и полезные

Bashir Magomedov said...

Приятно познакомиться. В свое время я ушел из ЖЖ, так как там не было возможности вставлять скрипты (я думаю и сейчас нет), и нельзя было загружать фотографии :) Хотя да, его сила в иерархических комментариях. Да, можно через опен айди в принципе с любого аккаунта типа ЖЖ, фейсбука или гугла. Спасибо за отзыв, буду писать и дальше иншаАллах.