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); } }
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); }
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); }