Реклама:

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

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

Более удачный подход состоит в кэшировании Windows Principal и извлечении его из кэша в каждом запросе для заполнения Context.User. Код страницы может на некотором этапе извлечь Windowsldentity из контекста и олицетворить учетную запись программным методом.

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

Итак, начнем с создания объекта WindowsPrincipal из предоставленных мандатов.

Создание WindowsPrinclpai из маркера

// Создаем WindowsPrincipal из мандатов public static WindowsPrincipal GetWindowsPrincipaK string username, string password, string authority)

<

Windowsldentity id = getWindowsIdentity( username, password, authority);

if (id != null)

return now WindowsPrincipal(id);

return null;

}

В странице регистрации вы аутснтифицируете пользователя и котируете объект WindowsPrincipal. Чтобы получить имя пользователя обратно и извлечь котированный принципал, издайте дополнительный билет аутентификации.

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

Кэширование маркера Windows

protected void _btntogin_Click(objuct sender, EventArgs e) <

WindowsPrincipal p = LogonUserHelper.GetwindowsPrinciDal( .txtUsemame.Text, _txtPassword. lext, ".");

if (p != null) {

LogonUserHelper.CachePrincipal(_txt Usoi name.Text, p); FormsAuthenticat ion.RedirectFromLoginPage( _txtUsername.Text, false);

)

else

_1itHessage.Text = "Login failed, please try again";

>

// Кэширование WindowsPrincipal public static void Cacr>ePrincipal( string key, WindowsPrincipal principal, int timeout)

«

HttpContext ctx = HttpContext.Current;

ctx.Cache.Insert( key,

principal, null,

DateTime.Now.AddMinutes( timeout), Cache.NoSlidingExpiration);

// Кэширование WinoowsPrincipal с использованием настройки timeout из Forms public static void CacbePrincipaK string key, WindowsPrincipal principal)

{

CachePrincipal(key, principal. FormsAuthTimeout);

>

// Получение значения timeout из конфигурации Forms public static int FormsAuthTimeout <


⇐ Предыдущая страница| |Следующая страница ⇒