我已经扩展了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);
理想情况下,所有过期的角色都不会添加为“声明”,因此用户在过期时将失去对基于角色的位置的访问权限。