Asp.Net Core Identity - авторизовать атрибут с ролями и кэшированием? - PullRequest
0 голосов
/ 06 ноября 2019

У меня есть простое веб-приложение в ASP.Net Core с идентификацией ядра ASP.Net. Я использую авторизацию на основе ролей на различных контроллерах, и мне кажется, что атрибут Authorize неправильно фиксирует изменения в членстве в роли.

Допустим, я украшаю контроллер атрибутом authorize и указываюроль, как это:

[Authorize(Roles = "TestRole")]

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

Затем я программно добавляю пользователя в TestRole (я создал простой графический интерфейс управления пользователями ввеб-приложение, в котором я могу управлять пользователями и ролями). Согласно методу GetRolesAsync(), пользователь успешно добавлен в роль, и все выглядит хорошо, если я проверяю записи в таблицах идентификаторов в БД. Однако я все еще не могу получить доступ к контроллеру - атрибут Authorize, кажется, не знает, что пользователь теперь находится в этой роли. Информация о роли, похоже, кешируется. Если я подожду достаточно долго, прежде чем попытаться снова (возможно, несколько часов), то это, похоже, будет работать правильно. Если я прерву процесс IIS Express и перезапущу веб-сайт, это немедленно сработает, предполагая, что информация о роли каким-то образом кэшируется.

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

Есть идеи?

1 Ответ

0 голосов
/ 06 ноября 2019

ОК - как типично. Я пытался обдумать это несколько дней назад, и как только я наконец отправлю вопрос в SO, я найду ответ:)

По умолчанию, ASP.Net Identityсохраняет авторизованные роли пользователя в заявке на роль после успешного входа пользователя. Эти заявки хранятся в cookie до тех пор, пока пользователь не выйдет из системы или не закроет браузер.

Можно ли кэшировать авторизации в ASP.NET MVC & Identity 2.0?

...