根据日期从令牌中删除角色声明

时间:2019-05-01 15:46:41

标签: asp.net-core asp.net-identity identityserver4

我已经扩展了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);

理想情况下,所有过期的角色都不会添加为“声明”,因此用户在过期时将失去对基于角色的位置的访问权限。

0 个答案:

没有答案