MVC 4 AuthorizeAttribute Users - когда это очищается

Я продлил AuthorizeAttribute с моим собственным классом.

Я специально отменяю OnAuthorization метод:

  • Я создаюClaimsPrincipal(если пользователь распознается) и...
    • назначитьClaimsPrincipalвfilterContext.HttpContext.User
    • иесли this.Users IsNullOrEmpty Я установилthis.UsersкClaimsPrincipal.Identity.Name
  • ... и я заканчиваю с призывом base.OnAuthorization

Я использую это расширение AuthorizeAttribute, добавляя экземпляр в GlobalFilterCollection:globalFilterCollection.Add(new AuthorizationAttributeExtension());

Приложение запускается впервые...

Запрос 1 поступает от пользователя 1, пользователя 1 ClaimsPrincipal создан filterContext.HttpContext.User для User 1, и потому что this.Users IsNullOrEmpty,this.Usersимеет значение User1.Identity.Name. Следовательноbase.AuthorizeCoreвернет истину. Пользователь 1 получает.

Запрос 2 поступает от пользователя 2, пользователя 2ClaimsPrincipal создан filterContext.HttpContext.User для User 2, и потому что this.Users не является NullOrEmpty (все еще имеет значение от пользователя 1)!, this.Users остается User1.Identity.Name. Следовательно base.AuthorizeCore вернет false (Пользователь 1 <> Пользователь 2). Пользователь 2 не может войти!

Вопросы:

Почему this.Users все еще есть значение из предыдущего запроса? Это by-design? Зачем?

я думал this.Users может быть пустым для каждого нового запроса? Как this.Users очиститься?

Может быть, я не должен проверять IsNullOrEmpty, просто установите this.Users в "User1,User2", что позволило бы обоим пользователям... Но если я получу 100 уникальных пользователей...

Или, может быть, я не должен был устанавливать this.Users совсем; в конце концов this.Users похоже, что речь идет об авторизации только определенных пользователей; Мне не нужны только конкретные пользователи, мне нужен любой аутентифицированный пользователь, чтобы войти; может мне стоит уйти this.Users пусто!

0 ответов

Другие вопросы по тегам