예제 #1
0
        public static void ClassInitialize(TestContext context)
        {
            _testConfigKeys.Add(PRIVATE_KEY_CONFIG_KEY, PRIVATE_KEY_CONFIG_VALUE);
            _testConfigKeys.Add(KEY_SIZE_CONFIG_KEY, KEY_SIZE_CONFIG_VALUE);

            configuration = new ConfigurationBuilder()
                            .AddInMemoryCollection(_testConfigKeys)
                            .Build();

            tokenBuilderService = new JwtTokenBuilderService(configuration);

            publicIDClaims = new List <TokenClaimModel>
            {
                new TokenClaimModel("Username", "TestUsername1"),
                new TokenClaimModel("EmailAddress", "TestEmailAddress1"),
                new TokenClaimModel("FirstName", "TestFirstName1"),
                new TokenClaimModel("LastName", "TestLastName1"),
                new TokenClaimModel("Birthdate", DateTime.UtcNow.ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")),
            };

            jwtPayloadIDModel = new JwtPayloadModel
            {
                PublicClaims   = publicIDClaims,
                Issuer         = new TokenClaimModel("iss", "TestIssuer1"),
                Subject        = new TokenClaimModel("sub", "TestSubject1"),
                Audience       = new TokenClaimModel("aud", "TestAudience1"),
                ExpirationTime = new TokenClaimModel("exp", "30"),
                NotBefore      = new TokenClaimModel("nbf", DateTime.UtcNow.ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")),
                IssuedAt       = new TokenClaimModel("iat", DateTime.UtcNow.ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'"))
            };
        }
예제 #2
0
        public string CreateToken(List <TokenClaimModel> userClaims)
        {
            var jwtPayloadModel = new JwtPayloadModel();

            foreach (var userClaim in userClaims)
            {
                switch (userClaim.Type)
                {
                case "iss":
                    jwtPayloadModel.Issuer = new TokenClaimModel("iss", userClaim.Value);
                    break;

                case "sub":
                    jwtPayloadModel.Subject = new TokenClaimModel("sub", userClaim.Value);
                    break;

                case "aud":
                    jwtPayloadModel.Audience = new TokenClaimModel("aud", userClaim.Value);
                    break;

                case "exp":
                    jwtPayloadModel.ExpirationTime = new TokenClaimModel("exp", userClaim.Value);
                    break;

                case "nbf":
                    jwtPayloadModel.NotBefore = new TokenClaimModel("nbf", userClaim.Value);
                    break;

                case "iat":
                    jwtPayloadModel.IssuedAt = new TokenClaimModel("iat", userClaim.Value);
                    break;

                default:
                {
                    jwtPayloadModel.PublicClaims.Add(userClaim);
                }
                break;
                }
            }

            var token = _tokenBuilderService.CreateToken(jwtPayloadModel);

            return(token);
        }
예제 #3
0
        public string CreateToken(JwtPayloadModel jwtPayloadModel)
        {
            var privateKeyEncrypted = _configuration["PrivateKey"];
            var privateKey          = Convert.FromBase64String(privateKeyEncrypted);

            var keySize = int.Parse(_configuration["SecurityKeySettings:KeySize"]);

            using RSA rsa = RSA.Create(keySize);
            rsa.ImportRSAPrivateKey(privateKey, out _);
            var signingCredentials = new SigningCredentials(new RsaSecurityKey(rsa), SecurityAlgorithms.RsaSha256)
            {
                CryptoProviderFactory = new CryptoProviderFactory {
                    CacheSignatureProviders = false
                }
            };

            var claims = new List <Claim>();

            foreach (var userClaim in jwtPayloadModel.PublicClaims)
            {
                claims.Add(new Claim(userClaim.Type, userClaim.Value));
            }

            var tokenHandler = new JsonWebTokenHandler();

            var tokenDescriptor = new SecurityTokenDescriptor
            {
                Issuer             = jwtPayloadModel.Issuer.Value,
                Audience           = jwtPayloadModel.Audience.Value,
                IssuedAt           = DateTime.Parse(jwtPayloadModel.IssuedAt.Value).ToUniversalTime(),
                NotBefore          = DateTime.Parse(jwtPayloadModel.NotBefore.Value).ToUniversalTime(),
                Expires            = DateTime.UtcNow.AddMinutes(Double.Parse(jwtPayloadModel.ExpirationTime.Value)).ToUniversalTime(),
                Subject            = new ClaimsIdentity(claims),
                SigningCredentials = signingCredentials,
            };

            string finalToken = tokenHandler.CreateToken(tokenDescriptor);

            return(finalToken);
        }