Пример #1
0
        public async Task <IReadOnlyCollection <Token> > GetTokensAsync(CancellationToken cancellationToken = default)
        {
            var refreshToken = await _tokenStore.GetTokenAsync(TokenType.RefreshToken).ConfigureAwait(false);

            if (refreshToken == null)
            {
                return(new List <Token>());
            }

            _logger.LogDebug("Refreshing token");

            var refreshTokenResponse = await _tokenClient.GetRefreshTokenAsync(refreshToken.Value, cancellationToken)
                                       .ConfigureAwait(false);

            //todo: handle errors
            if (refreshTokenResponse.IsError)
            {
                _logger.LogError(refreshTokenResponse.Exception, "Error refreshing token. {Message}",
                                 refreshTokenResponse.ErrorDescription);

                return(new List <Token>());
            }

            var accessToken = Helpers.CreateAccessToken(refreshTokenResponse);

            _logger.LogDebug("Tokens refreshed successfully.");

            return(new List <Token>
            {
                accessToken,
                refreshToken
            });
        }