0

Я поставил пользовательский атрибут авторизовать в мое приложение MVC, что делаетUser.IsInRole терпит неудачу за одно действие, но не для другого

if (!this.Roles.Split(',').Any(filterContext.HttpContext.User.IsInRole))

и если это верно будет перенаправить вас на несанкционированный.

Я поместил этот атрибут на свой контроллер на уровне контроллера.

Одно действие работает нормально, и в одном действии я получаю несанкционированный доступ.

Есть ли какая-то ошибка или проблема в системе ролей? Я прочитал, что выходы из системы и могут заставить некоторый кеш обновить или что-то еще, однако система, которую я использую, проверяет подлинность с вашими учетными данными домена, поэтому нет возможности выйти из системы.

Я попытался перезапустить пул приложений и удалить мой файл cookie сеанса, но ничего не сработало.

Кто-нибудь испытал эту конкретную проблему раньше или имеет некоторые рекомендации относительно возможного устранения любого связанного с ней кэширования (при условии, что это проблема кэширования)?

ETA: Другой пользователь в системе дал себе роль, требуемую для контроллера, и оба действия отлично работают для него. Поэтому, возможно, мой пользователь как-то прослушивается. Это на UAT, что немного сложнее отлаживать, чем работать на моей локальной машине (что отлично работает).

ETA2: Я уверен, что это проблема кэширования, так как она идет по URL-адресу с? 1 = 1 в строке запроса, она работает. Однако я не могу сделать недействительным кеш. Это может быть проблемой в будущем при назначении ролей людям.

ответ

1

Во-первых, нам нужно больше кода, прежде чем мы сможем дать вам окончательные ответы. Однако:

  1. Кэширование может быть проблемой. Если вы используете что-то вроде OutputCache, вы должны убедиться, что используете VaryByCustom и каким-то образом включаете идентификатор пользователя или другой идентифицирующий токен в возвращенной пользовательской строке.

  2. Если вы добавляете роли пользователям, вы должны либо вывести пользователя из системы, либо подписать их обратно, либо иным образом аннулировать их авторизацию. В Идентичность, например, вы можете просто аннулировать штамп безопасности, что приведет к пользователю авторизовать заново, обновлять такие вещи, как претензии или роли, которые были изменены, так как они вошли в систему.

+0

Справедливо, что он есть (2) и это просто кеширование URL-адреса против маркера безопасности. Я не могу опубликовать больше кода, потому что это все внутреннее отношение к ролевой системе MVC. Я думаю, мне нужно найти способ сделать недействительным и повторно проверить пользователя, чтобы исправить эту проблему. Мне любопытно узнать, где он хранит этот кеш, однако, поскольку недействительность пула приложений не очищает его. В устаревший код я иду ... – NibblyPig

Смежные вопросы