У меня есть простое веб-приложение в ASP.Net Core с идентификацией ядра ASP.Net. Я использую авторизацию на основе ролей на различных контроллерах, и мне кажется, что атрибут Authorize
неправильно фиксирует изменения в членстве в роли.
Допустим, я украшаю контроллер атрибутом authorize и указываюроль, как это:
[Authorize(Roles = "TestRole")]
Затем я вхожу в систему как пользователь, который не в этой роли. Я пытаюсь получить доступ к контроллеру, и атрибут Authorize правильно запрещает мне доступ к контроллеру - выдает ошибку отказа в доступе.
Затем я программно добавляю пользователя в TestRole (я создал простой графический интерфейс управления пользователями ввеб-приложение, в котором я могу управлять пользователями и ролями). Согласно методу GetRolesAsync()
, пользователь успешно добавлен в роль, и все выглядит хорошо, если я проверяю записи в таблицах идентификаторов в БД. Однако я все еще не могу получить доступ к контроллеру - атрибут Authorize
, кажется, не знает, что пользователь теперь находится в этой роли. Информация о роли, похоже, кешируется. Если я подожду достаточно долго, прежде чем попытаться снова (возможно, несколько часов), то это, похоже, будет работать правильно. Если я прерву процесс IIS Express и перезапущу веб-сайт, это немедленно сработает, предполагая, что информация о роли каким-то образом кэшируется.
Мне не удалось найти ничего, что явно указывает на то, что информация о роли действительно кэшируется. или как отключить его в этом отношении. Когда я изменяю роль пользователей в моей системе, мне нужно, чтобы эти изменения были отражены сразу.
Есть идеи?