public async Task <Token> GenerateToken(string token, string issuer, string[] audiences, double accessTokenExpirationInMinutes, double refreshTokenExpirationInMinutes, IDictionary <string, object> customClaims = null, bool generateRefreshToken = false) { await _tokenStore.DeleteExpiredAsync(CancellationToken.None); RefreshToken refreshToken = await _tokenStore.FindByTokenAsync(token, CancellationToken.None); if (refreshToken == null) { return(null); } JwtSecurityTokenHandler handler = new JwtSecurityTokenHandler(); JwtSecurityToken jwtToken = handler.ReadJwtToken(refreshToken.AccessToken); Claim userIdClaim = jwtToken.Claims.FirstOrDefault(c => c.Type == JwtRegisteredClaimNames.Sid); Claim usernameClaim = jwtToken.Claims.FirstOrDefault(c => c.Type == JwtRegisteredClaimNames.Sub); Token regeneratedToken = await GenerateToken(issuer, audiences, userIdClaim.Value, usernameClaim.Value, accessTokenExpirationInMinutes, refreshTokenExpirationInMinutes, customClaims, generateRefreshToken); await _tokenStore.DeleteAsync(token, CancellationToken.None); return(regeneratedToken); }
public async Task FindByTokenAsync_ShouldReturnARefreshToken() { // Arrange ITokenStore tokenStore = _serviceProvider.GetService <ITokenStore>(); string token = "4d527988-42b6-42ed-83fc-7acf5abd4a38"; // Act RefreshToken refreshToken = await tokenStore.FindByTokenAsync(token, CancellationToken.None); // Assert Assert.NotNull(refreshToken); }