コード例 #1
0
        /// <inheritdoc />
        public async Task <TokenExchangeResult> ExchangeBankTokenAsync(string publicToken, string accountId)
        {
            Condition.Requires(publicToken).IsNotNullOrWhiteSpace();

            ExchangeTokenRequest exchangeRequest = new ExchangeTokenRequest(this.clientId, this.clientSecret, publicToken, accountId);
            HttpResponseMessage  response        = await this.httpClient.PostAsJsonAsync("exchange_token", exchangeRequest);

            string responseJson = await response.Content.ReadAsStringAsync();

            TokenExchangeResult result = new TokenExchangeResult();

            if (response.StatusCode == HttpStatusCode.OK)
            {
                ExchangeTokenResponse tokenResponse = JsonConvert.DeserializeObject <ExchangeTokenResponse>(responseJson);

                result.AccessToken      = new AccessToken(tokenResponse.AccessToken);
                result.BankAccountToken = tokenResponse.BankToken;

                return(result);
            }

            result.Exception = await this.ParseException(response, responseJson);

            return(result);
        }
コード例 #2
0
        public async Task <IActionResult> RefreshJwtToken([FromBody] ExchangeTokenRequest exchangeTokenRequest)
        {
            string refreshToken = _facebookService.RefreshFacebookToken(exchangeTokenRequest.Token);

            if (refreshToken == null)
            {
                return(Unauthorized("Invalid token1"));
            }

            exchangeTokenRequest.Token = refreshToken;
            return(GenerateToken(exchangeTokenRequest, refreshToken));
        }
コード例 #3
0
        public async Task ExchangePublicTokenAsync_should_retrieve_a_response_from_the_api_server()
        {
            // Arrange
            using PlaidClient client = new PlaidClient { Environment = Environment.Sandbox };

            // Act
            ExchangeTokenRequest request = new ExchangeTokenRequest {
            };
            ExchangeTokenResponse result = await client.ExchangeTokenAsync(request);

            // Assert
            result.Exception.ShouldBeNull();
            result.SuccessfulOutcome.ShouldBeTrue();
            result.AccessToken.ShouldNotBeNull();
        }
コード例 #4
0
        private IActionResult GenerateToken(ExchangeTokenRequest exchangeTokenRequest, string refreshToken)
        {
            var validTokenInfo = GetValidTokenInfo(exchangeTokenRequest);

            if (validTokenInfo == null)
            {
                return(Unauthorized("Invalid token"));
            }

            long unixTime = ((DateTimeOffset)DateTime.UtcNow).ToUnixTimeSeconds();
            int  lifeTime = (int)(validTokenInfo.expires_at - unixTime);

            return(Ok(new ExchangeTokenResponse
            {
                expires_in = lifeTime,
                access_token = _jwtTokenGenerator.GenerateJwtToken(validTokenInfo, lifeTime),
                token_type = "Bearer",
                refresh_token = refreshToken,
                source = exchangeTokenRequest.Source
            }));
        }
コード例 #5
0
        public async Task <ApiResponse <AuthResponse> > ExchangeRefreshToken(ExchangeTokenRequest tokenRequest)
        {
            var refreshToken = _hostRepository.GetFirst <RefreshToken>(r => r.Token == tokenRequest.RefreshToken);

            ClaimsPrincipal principal = GetPrincipalFromToken(tokenRequest.AccessToken);

            if (principal == null)
            {
                return(ApiResponse <AuthResponse> .Error()); //ErrorProvider.GetError("no_valid_token")
            }

            var expiryDate          = long.Parse(principal.Claims.Single(x => x.Type == JwtRegisteredClaimNames.Exp).Value);
            var expiryDateTimeLocal = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).AddSeconds(expiryDate).ToLocalTime();
            var jti = principal.Claims.Single(x => x.Type == JwtRegisteredClaimNames.Jti).Value;

            if (expiryDateTimeLocal > DateTime.Now)
            {
                return(ApiResponse <AuthResponse> .Error()); //ErrorProvider.GetError("token_not_expired") });
            }

            if (refreshToken == null)
            {
                return(ApiResponse <AuthResponse> .Error()); //ErrorProvider.GetError("token_not_found") });
            }

            if (refreshToken.Invalidated)
            {
                return(ApiResponse <AuthResponse> .Error()); //ErrorProvider.GetError("no_valid_token") });
            }

            if (refreshToken.ExpiresOn < DateTime.Now)
            {
                refreshToken.Invalidated = true;
                _hostRepository.Update(refreshToken);
                await _hostRepository.SaveAsync();

                return(ApiResponse <AuthResponse> .Error()); //ErrorProvider.GetError("token_expired") });
            }

            if (refreshToken.JwtId != jti)
            {
                return(ApiResponse <AuthResponse> .Error()); //ErrorProvider.GetError("token_mismatch") });
            }

            var user = await _userManager.FindByIdAsync(refreshToken.ApplicationUserId.ToString());

            if (user != null)
            {
                var tokens = await _jwtTokenFactory.GenerateAuthResponseForUser(user);

                refreshToken.Invalidated = true;
                _hostRepository.Update(refreshToken);
                await _hostRepository.SaveAsync();

                return(ApiResponse <AuthResponse> .Success(tokens));
            }
            else
            {
                return(ApiResponse <AuthResponse> .Error()); //ErrorProvider.GetError("auth_user_not_found") });
            }
        }
コード例 #6
0
 private UserInfo GetValidTokenInfo(ExchangeTokenRequest exchangeTokenRequest)
 {
     return("facebook".Equals(exchangeTokenRequest.Source.ToLower())
         ? _facebookService.GetUserInfoByToken(exchangeTokenRequest.Token)
         : null);
 }
コード例 #7
0
 public async Task <IActionResult> GetJwtToken([FromBody] ExchangeTokenRequest exchangeTokenRequest)
 {
     return(GenerateToken(exchangeTokenRequest, exchangeTokenRequest.Token));
 }
コード例 #8
0
        public async Task <ActionResult <AuthResponse> > RefreshToken([FromBody] ExchangeTokenRequest tokenRequest)
        {
            var response = await _authService.ExchangeRefreshToken(tokenRequest);

            return(response.ToActionResult(this));
        }