示例#1
0
        public async Task <Token> GenerateToken(string issuer, string[] audiences, string userId, string username,
                                                double accessTokenExpirationInMinutes, double refreshTokenExpirationInMinutes,
                                                IDictionary <string, object> customClaims = null, bool generateRefreshToken = false)
        {
            DateTimeOffset now = DateTime.UtcNow;
            DateTime       refreshTokenExpirationDate = now.DateTime.AddMinutes(refreshTokenExpirationInMinutes);
            JwtPayload     tokenPayload = SetPayload(issuer, audiences, userId, username, accessTokenExpirationInMinutes, now, customClaims);

            Token token = new Token();

            token.AccessToken = await WriteToken(tokenPayload);

            if (generateRefreshToken)
            {
                token.RefreshToken = Guid.NewGuid().ToString();

                RefreshToken refreshToken = new RefreshToken
                {
                    Token          = token.RefreshToken,
                    UserId         = long.Parse(userId),
                    ExpirationDate = refreshTokenExpirationDate,
                    AccessToken    = token.AccessToken
                };

                IdentityResult identityResult = await _tokenStore.CreateRefreshTokenAsync(refreshToken, CancellationToken.None);

                if (!identityResult.Succeeded)
                {
                    return(null);
                }
            }

            return(token);
        }
        public async Task CreateRefreshTokenAsync_ShouldCreateANewRefreshToken()
        {
            // Arrange
            ITokenStore  tokenStore   = _serviceProvider.GetService <ITokenStore>();
            RefreshToken refreshToken = new RefreshToken
            {
                UserId         = 3,
                Token          = Guid.NewGuid().ToString(),
                ExpirationDate = DateTime.Now.AddMinutes(10),
                AccessToken    = ""
            };

            // Act
            IdentityResult identityResult = await tokenStore.CreateRefreshTokenAsync(refreshToken, CancellationToken.None);

            // Assert
            Assert.True(identityResult.Succeeded);
        }