Я расширил IdentityUserRole, чтобы добавить дату окончания срока действия, и могу добавить дату окончания срока действия к роли пользователя.Теперь мне нужно условно добавить утверждения к токену, основываясь на дате истечения срока действия роли пользователя.
В идеале при вызове GenerateClaimsAsync (), как указано ниже, он будет возвращать только утверждения о роли для этого пользователя, срок действия которых не истек или у которых нетсрок действия установлен.
Я попытался переопределить UserManager.GetUserRoles (), но не могу сделать это из-за того, что не могу найти точку, в которой Identity Server получает роли.
public override async Task<ClaimsPrincipal> CreateAsync(ScholarRxUser user)
{
if (user == null)
throw new ArgumentNullException(nameof(user));
_logger.LogDebug($"Creating user token for {user.Id}");
var entry = _context.Entry(user);
var profiles = entry.Collection(u => u.UserProfiles);
if(!profiles.IsLoaded)
await profiles.LoadAsync();
var userId = user.Id;
var userName = user.UserName;
// this is were I get the roles and I need it to only return non expired roles
var identity = await GenerateClaimsAsync(user);
В идеале все роли с истекшим сроком действияне будет добавлен в качестве утверждений, поэтому пользователь потеряет доступ к расположениям на основе ролей в момент истечения срока действия.