private async Task <ClaimsIdentity> GetClaimsIdentityFromCache(User user, ImpersonationCacheItem cacheItem) { var identity = (ClaimsIdentity)(await _principalFactory.CreateAsync(user)).Identity; if (!cacheItem.IsBackToImpersonator) { //Add claims for audit logging if (cacheItem.ImpersonatorTenantId.HasValue) { identity.AddClaim(new Claim(AbpClaimTypes.ImpersonatorTenantId, cacheItem.ImpersonatorTenantId.Value.ToString(CultureInfo.InvariantCulture))); } identity.AddClaim(new Claim(AbpClaimTypes.ImpersonatorUserId, cacheItem.ImpersonatorUserId.ToString(CultureInfo.InvariantCulture))); } return(identity); }
private async Task <string> GenerateImpersonationTokenAsync(int?tenantId, long userId, bool isBackToImpersonator) { //Create a cache item var cacheItem = new ImpersonationCacheItem( tenantId, userId, isBackToImpersonator ); if (!isBackToImpersonator) { cacheItem.ImpersonatorTenantId = AbpSession.TenantId; cacheItem.ImpersonatorUserId = AbpSession.GetUserId(); } //Create a random token and save to the cache var token = Guid.NewGuid().ToString(); await _cacheManager .GetImpersonationCache() .SetAsync(token, cacheItem, TimeSpan.FromMinutes(1)); return(token); }