public virtual async Task <string> GetAccessTokenAsync(IdentityClientConfiguration configuration) { var cacheKey = CalculateTokenCacheKey(configuration); var tokenCacheItem = await TokenCache.GetAsync(cacheKey); if (tokenCacheItem == null) { var tokenResponse = await GetTokenResponse(configuration); if (tokenResponse.IsError) { if (tokenResponse.ErrorDescription != null) { throw new AbpException($"Could not get token from the OpenId Connect server! ErrorType: {tokenResponse.ErrorType}. " + $"Error: {tokenResponse.Error}. ErrorDescription: {tokenResponse.ErrorDescription}. HttpStatusCode: {tokenResponse.HttpStatusCode}"); } var rawError = tokenResponse.Raw; var withoutInnerException = rawError.Split(new string[] { "<eof/>" }, StringSplitOptions.RemoveEmptyEntries); throw new AbpException(withoutInnerException[0]); } tokenCacheItem = new IdentityModelTokenCacheItem(tokenResponse.AccessToken); await TokenCache.SetAsync(cacheKey, tokenCacheItem, new DistributedCacheEntryOptions { AbsoluteExpirationRelativeToNow = TimeSpan.FromSeconds(configuration.CacheAbsoluteExpiration) }); } return(tokenCacheItem.AccessToken); }
protected virtual string CalculateTokenCacheKey(IdentityClientConfiguration configuration) { return(IdentityModelTokenCacheItem.CalculateCacheKey(configuration)); }