Exemple #1
0
        public static async Task SaveToken(string userId, TokenSecrets tokens)
        {
            await _keyVaultClient.SetSecretAsync(Config.AzureKeyVaultEndpoint, TokenSecretName(userId), JsonConvert.SerializeObject(tokens));

            if (_cachedTokens.ContainsKey(userId))
            {
                _cachedTokens[userId] = tokens;
            }
            else
            {
                _cachedTokens.Add(userId, tokens);
            }
        }
Exemple #2
0
        public static async Task <TokenSecrets> GetToken(string userId)
        {
            TokenSecrets tokens = null;

            if (_cachedTokens.ContainsKey(userId))
            {
                tokens = _cachedTokens[userId];
            }
            else
            {
                var secret = await _keyVaultClient.GetSecretAsync(Config.AzureKeyVaultEndpoint, TokenSecretName(userId));

                tokens = JsonConvert.DeserializeObject <TokenSecrets>(secret.Value);
                _cachedTokens.Add(userId, tokens);
            }

            if (DateTime.UtcNow.AddMinutes(5) > tokens.ExpiresInUtc)
            {
                throw new TokenExpiredException(tokens.RefreshToken);
            }

            return(tokens);
        }
Exemple #3
0
        private static async Task <string> GetAccessToken(string userId)
        {
            TokenSecrets tokens = null;

            try
            {
                tokens = await SecretRepository.GetToken(userId);
            }
            catch (TokenExpiredException ex)
            {
                var tokenResponse = await SpotifyApi.RefreshTokenAsync(ex.RefreshToken);

                tokens = new TokenSecrets
                {
                    AccessToken  = tokenResponse.access_token,
                    RefreshToken = tokenResponse.refresh_token ?? ex.RefreshToken,
                    ExpiresInUtc = DateTime.UtcNow.AddSeconds(tokenResponse.expires_in)
                };

                await SecretRepository.SaveToken(userId, tokens);
            }

            return(tokens.AccessToken);
        }