예제 #1
0
        /// <summary>颁发令牌</summary>
        /// <param name="name"></param>
        /// <param name="secret"></param>
        /// <param name="expire"></param>
        /// <returns></returns>
        public TokenModel IssueToken(String name, String secret, Int32 expire, String id = null)
        {
            if (id.IsNullOrEmpty())
            {
                id = Rand.NextString(8);
            }

            // 颁发令牌
            var ss  = secret.Split(':');
            var jwt = new JwtBuilder
            {
                Issuer  = Assembly.GetEntryAssembly().GetName().Name,
                Subject = name,
                Id      = id,
                Expire  = DateTime.Now.AddSeconds(expire),

                Algorithm = ss[0],
                Secret    = ss[1],
            };

            return(new TokenModel
            {
                AccessToken = jwt.Encode(null),
                TokenType = jwt.Type ?? "JWT",
                ExpireIn = expire,
                RefreshToken = jwt.Encode(null),
            });
        }
예제 #2
0
        public async Task <AuthToken> CreateAuthTokenAsync(string userType, string userId, TokenCreationParameters parameters)
        {
            var user = await _userManager.FindUserAsync(userType, userId, UserSearchMode.FindById);

            var builder = new JwtBuilder()
                          .WithAlgorithm(new HMACSHA256Algorithm())
                          .WithSecret(_secret)
                          .AddClaim("sub", userId)
                          .AddClaim("ut", userType)
                          .AddClaim("iat", DateTimeOffset.UtcNow.ToUnixTimeSeconds())
                          .AddClaim("preferred_username", user?.DisplayName ?? userId);

            if (parameters.Audience != null)
            {
                builder.AddClaim("aud", parameters.Audience);
            }

            if (parameters.ExpirationTime != null)
            {
                builder.AddClaim("exp", parameters.ExpirationTime.Value.ToUnixTimeSeconds());
            }

            var token = builder.Encode();

            return(new AuthToken
            {
                Token = token,
                OwnerId = userId,
                OwnerType = userType
            });
        }
예제 #3
0
        public string Create(string secret, IDictionary <string, object> claims, string tokenIssuer = "", TimeSpan?tokenTimeSpan = null)
        {
            if (string.IsNullOrWhiteSpace(secret))
            {
                throw new ArgumentNullException(nameof(secret));
            }

            if (claims is null || !claims.Any())
            {
                throw new ArgumentNullException(nameof(claims));
            }

            _jwtBuilder.WithSecret(Encoding.UTF8.GetBytes(secret));

            //add Issuer if specified
            if (!string.IsNullOrWhiteSpace(tokenIssuer))
            {
                _jwtBuilder.AddClaim(ClaimName.Issuer, tokenIssuer);
            }

            //add ExpirationTime if specified
            if (tokenTimeSpan.HasValue)
            {
                _jwtBuilder.AddClaim(ClaimName.ExpirationTime, DateTimeOffset.UtcNow.Add(tokenTimeSpan.Value).ToUnixTimeSeconds());
            }

            //include all provided claims
            foreach (var claim in claims)
            {
                _jwtBuilder.AddClaim(claim.Key, claim.Value);
            }

            //create and return the token
            return(_jwtBuilder.Encode());
        }
예제 #4
0
        public static string BuildJwt(this object obj, string secret = null, long minutes = 60)
        {
            if (secret.IsNullOrWhiteSpace())
            {
                secret = Secret;
            }

            try
            {
                var jwt = new JwtBuilder()
                          .WithAlgorithm(new HMACSHA256Algorithm())
                          .WithSecret(secret);

                foreach (var propertyInfo in obj.GetType().GetProperties())
                {
                    jwt.AddClaim(propertyInfo.Name.ToLower(), propertyInfo.GetValue(obj));
                }

                jwt.AddClaim("expire", DateTime.Now.AddMinutes(minutes));

                var token = jwt.Encode();
                return(token);
            }
            catch
            {
                return(null);
            }
        }
예제 #5
0
        public void AlgorithmTest()
        {
            var builder = new JwtBuilder
            {
                Id       = null,
                Subject  = "Cube",
                Issuer   = "NewLife",
                IssuedAt = DateTime.Now,
                //Expire = TimeSpan.FromHours(0),
                Type      = "JWT",
                Algorithm = "HS512",
                Secret    = "Smart",
            };

            var token = builder.Encode(new { sub = "0201", name = "stone" });

            Assert.NotNull(token);
            Assert.NotEmpty(token);

            var builder2 = new JwtBuilder
            {
                Secret = builder.Secret,
            };

            var rs = builder2.TryDecode(token, out var payload);

            Assert.True(rs);
            Assert.NotEqual(builder.Subject, builder2.Subject);
            Assert.Equal("0201", builder2.Subject);
            Assert.Equal("JWT", builder2.Type);

            Assert.Equal(builder.Issuer, builder2.Issuer);
            Assert.Equal(builder.IssuedAt.Trim(), builder2.IssuedAt.Trim());
            Assert.Equal("stone", builder2["name"]);
        }
예제 #6
0
        public static string GenerateToken(ApiUser user)
        {
            var builder = new JwtBuilder()
                          .WithAlgorithm(new HMACSHA256Algorithm())
                          .WithSecret(Config.JWTSecret)
                          .AddClaim("exp", new DateTimeOffset(Authenticator.TokenExpireTime).ToUnixTimeSeconds());

            user.SerializeToJwt(builder);
            return(builder.Encode());
        }
예제 #7
0
            public static string BuildToken(Dictionary <string, string> claims, string secret)
            {
                var builder = new JwtBuilder()
                              .WithAlgorithm(new HMACSHA256Algorithm())
                              .WithSecret(secret);

                claims.ToList().ForEach(claim => builder.AddClaim(claim.Key, claim.Value));

                return(builder.Encode());
            }
예제 #8
0
        public void Encode_Without_Dependencies_Should_Throw_Exception()
        {
            var builder = new JwtBuilder();

            Action action = () =>
                            builder.Encode();

            action.Should()
            .Throw <InvalidOperationException>("because a JWT can't be built without dependencies");
        }
        public static string CreateUserToken(User user)
        {
            PropertyInfo[] propertyInfos = typeof(User).GetProperties();

            var currTime = DateTime.Now;
            var token    = new JwtBuilder().WithAlgorithm(new HMACSHA256Algorithm()).WithSecret(SECRET_KEY).ExpirationTime(currTime.AddHours(8));

            foreach (var prop in propertyInfos)
            {
                token.AddClaim(prop.Name, prop.GetValue(user));
            }
            return(token.Encode());
        }
예제 #10
0
        /// <summary>颁发令牌</summary>
        /// <param name="app"></param>
        /// <param name="set"></param>
        /// <returns></returns>
        public TokenModel IssueToken(App app, Setting set)
        {
            // 颁发令牌
            var ss  = set.TokenSecret.Split(':');
            var jwt = new JwtBuilder
            {
                Issuer  = Assembly.GetEntryAssembly().GetName().Name,
                Subject = app.Name,
                Id      = Rand.NextString(8),
                Expire  = DateTime.Now.AddSeconds(set.TokenExpire),

                Algorithm = ss[0],
                Secret    = ss[1],
            };

            return(new TokenModel
            {
                AccessToken = jwt.Encode(null),
                TokenType = jwt.Type ?? "JWT",
                ExpireIn = set.TokenExpire,
                RefreshToken = jwt.Encode(null),
            });
        }
예제 #11
0
        public void ES512()
        {
            var prvKey = @"-----BEGIN PRIVATE KEY-----
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgevZzL1gdAFr88hb2
OF/2NxApJCzGCEDdfSp6VQO30hyhRANCAAQRWz+jn65BtOMvdyHKcvjBeBSDZH2r
1RTwjmYSi9R/zpBnuQ4EiMnCqfMPWiZqB4QdbAd0E7oH50VpuZ1P087G
-----END PRIVATE KEY-----";
            var pubKey = @"-----BEGIN PUBLIC KEY-----
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEEVs/o5+uQbTjL3chynL4wXgUg2R9
q9UU8I5mEovUf86QZ7kOBIjJwqnzD1omageEHWwHdBO6B+dFabmdT9POxg==
-----END PUBLIC KEY-----";

            var builder = new JwtBuilder
            {
                Algorithm = "ES512",
                Type      = "JWT",

                IssuedAt = 1516239022.ToDateTime(),
                Expire   = DateTime.MinValue,
                Secret   = prvKey,
            };

            var token = builder.Encode(new { sub = "1234567890", name = "NewLife", admin = true });

            Assert.NotNull(token);
            Assert.NotEmpty(token);

            var ts = token.Split('.');

            Assert.Equal(3, ts.Length);
            Assert.Equal("eyJhbGciOiJFUzUxMiIsInR5cCI6IkpXVCJ9", ts[0]);
            Assert.Equal("eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6Ik5ld0xpZmUiLCJhZG1pbiI6dHJ1ZSwiaWF0IjoxNTE2MjM5MDIyfQ", ts[1]);
            //Assert.Equal("xyCWz7tNjH4UUkxi7BqlWE4V857XA6SYC-ZFukvexvIgsGQt9SBcpdglz3NfhhrslOwF7HzWZHOJu3RrIFrDFA", ts[2]);

            var builder2 = new JwtBuilder
            {
                Algorithm = "ES512",

                Secret = pubKey,
            };
            var rs = builder2.TryDecode(token, out var msg);

            Assert.True(rs);
            Assert.Null(msg);

            Assert.Equal("JWT", builder2.Type);
            Assert.Equal("1234567890", builder2.Subject);
            Assert.Equal("NewLife", builder2["name"]);
            Assert.True(builder2["admin"].ToBoolean());
        }
예제 #12
0
        public void HS256_Encode2()
        {
            var builder = new JwtBuilder
            {
                Id        = Guid.NewGuid() + "",
                Subject   = "Cube",
                Issuer    = "NewLife",
                IssuedAt  = DateTime.Now,
                Audience  = "all",
                NotBefore = DateTime.Today,
                //Expire = TimeSpan.FromHours(0),
                Secret = "Smart",
            };

            var token = builder.Encode(new { sub = "0201", name = "stone" });

            Assert.NotNull(token);
            Assert.NotEmpty(token);

            // 有效期默认2小时
            Assert.True(builder.Expire.Year > 2000);
            var ts = builder.Expire - DateTime.Now;

            Assert.True(ts <= TimeSpan.FromHours(2));
            Assert.True(ts > TimeSpan.FromMinutes(2 * 60 - 1));

            var builder2 = new JwtBuilder
            {
                Secret = builder.Secret,
            };

            var rs = builder2.TryDecode(token, out var payload);

            Assert.True(rs);
            Assert.NotEqual(builder.Subject, builder2.Subject);
            Assert.Equal("0201", builder2.Subject);
            Assert.Null(builder2.Type);
            Assert.Equal(builder.Expire.Trim(), builder2.Expire.Trim());

            Assert.Equal(builder.Id, builder2.Id);
            Assert.Equal(builder.Issuer, builder2.Issuer);
            Assert.Equal(builder.IssuedAt.Trim(), builder2.IssuedAt.Trim());
            Assert.Equal(builder.Audience, builder2.Audience);
            Assert.Equal(builder.NotBefore, builder2.NotBefore);
            Assert.Equal("stone", builder2["name"]);
        }
예제 #13
0
        public static string EncodeJwt(string keyId, Dictionary <string, object> claims)
        {
            var builder = new JwtBuilder()
                          .WithAlgorithmFactory(_factory)
                          .WithAlgorithm(new RS256Algorithm(Certificate))
                          .WithSerializer(_serializer)
                          .WithValidator(_validator)
                          .WithSecret("passord")
                          .AddHeader(HeaderName.KeyId, keyId);

            foreach (var(key, value) in claims)
            {
                builder.AddClaim(key, value);
            }

            return(builder.Encode());
        }
예제 #14
0
        public void ES384()
        {
            var prvKey = @"RUNTMiAAAAAoECDSEE7PqKvRx+FXWXhpTXIm/ZquCKDa6UXA9+PMQRugM35vcgKAXR2pelQ2SqYjOFktBMm84x194VyepthORPQDRkEIcGIonNbCtCg+Y62sV9prPsXACNS//2huX38=";
            var pubKey = @"RUNTMSAAAAAoECDSEE7PqKvRx+FXWXhpTXIm/ZquCKDa6UXA9+PMQRugM35vcgKAXR2pelQ2SqYjOFktBMm84x194VyepthO";

            var builder = new JwtBuilder
            {
                Algorithm = "ES384",
                Type      = "JWT",

                IssuedAt = 1516239022.ToDateTime(),
                Expire   = DateTime.MinValue,
                Secret   = prvKey,
            };

            var token = builder.Encode(new { sub = "1234567890", name = "NewLife", admin = true });

            Assert.NotNull(token);
            Assert.NotEmpty(token);

            var ts = token.Split('.');

            Assert.Equal(3, ts.Length);
            Assert.Equal("eyJhbGciOiJFUzM4NCIsInR5cCI6IkpXVCJ9", ts[0]);
            Assert.Equal("eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6Ik5ld0xpZmUiLCJhZG1pbiI6dHJ1ZSwiaWF0IjoxNTE2MjM5MDIyfQ", ts[1]);
            //Assert.Equal("xyCWz7tNjH4UUkxi7BqlWE4V857XA6SYC-ZFukvexvIgsGQt9SBcpdglz3NfhhrslOwF7HzWZHOJu3RrIFrDFA", ts[2]);

            var builder2 = new JwtBuilder
            {
                Algorithm = "ES384",

                Secret = pubKey,
            };
            var rs = builder2.TryDecode(token, out var msg);

            Assert.True(rs);
            Assert.Null(msg);

            Assert.Equal("JWT", builder2.Type);
            Assert.Equal("1234567890", builder2.Subject);
            Assert.Equal("NewLife", builder2["name"]);
            Assert.True(builder2["admin"].ToBoolean());
        }
예제 #15
0
        public void HS256_Encode()
        {
            var builder = new JwtBuilder
            {
                //Id = null,
                //Subject = "Cube",
                //Issuer = "NewLife",
                IssuedAt = 1516239022.ToDateTime(),
                Expire   = DateTime.MinValue,
                Secret   = "Smart",
            };

            var token = builder.Encode(new { sub = "0201", name = "stone" });

            Assert.NotNull(token);
            Assert.NotEmpty(token);

            var ts = token.Split('.');

            Assert.Equal(3, ts.Length);
            Assert.Equal("eyJhbGciOiJIUzI1NiJ9", ts[0]);
            Assert.Equal("eyJzdWIiOiIwMjAxIiwibmFtZSI6InN0b25lIiwiaWF0IjoxNTE2MjM5MDIyfQ", ts[1]);
            Assert.Equal("mY2_rvQORkyYpK3f84liG2EDpaYY7pO43sRgcli381U", ts[2]);

            var builder2 = new JwtBuilder
            {
                Secret = builder.Secret,
            };

            ts = builder2.Parse(token);
            Assert.NotNull(ts);
            Assert.Equal(3, ts.Length);

            var rs = builder2.TryDecode(token, out var msg);

            Assert.True(rs);
            Assert.Null(msg);

            Assert.Null(builder2.Type);
            Assert.Equal("0201", builder2.Subject);
            Assert.Equal("stone", builder2["name"]);
        }
예제 #16
0
        public Task <string> Generate(UserInformation user, Guid correlationId, TimeSpan?expiresIn, CancellationToken cancellationToken)
        {
            var token = new JwtBuilder()
                        .WithAlgorithm(new HMACSHA512Algorithm())
                        .WithSecret(_userResolverSecret.GetSecret())
                        .AddClaim("sub", user.Username)
                        .AddClaim("uid", user.UserIdentifier)
                        .AddClaim("iat", ServiceClock.CurrentTime().ToUnixTimeSeconds())
            ;

            if (expiresIn != null)
            {
                token.AddClaim("exp", ServiceClock.CurrentTime().Add(expiresIn.Value).ToUnixTimeSeconds());
            }

            if (user.Roles != null && user.Roles.Length > 0)
            {
                token.AddClaim("roles", user.Roles);
            }
            else
            {
                token.AddClaim("roles", new string[0]);
            }

            if (user.Claims != null && user.Claims.Any())
            {
                foreach (var claim in user.Claims)
                {
                    string[] ignore = { "exp", "roles", "uid", "iat", "sub" };
                    if (!ignore.Contains(claim.Key))
                    {
                        token.AddClaim(claim.Key, claim.Value);
                    }
                }
            }

            var tokenStr = token.Encode();

            _logger.LogTrace($"Generated, token: {tokenStr}, correlationId: {correlationId}");
            return(Task.FromResult(tokenStr));
        }
        public string GenerateJwt(ClaimsPrincipal user)
        {
            // add identityhub claims
            var claims = user.Claims.ToList();

            // _builder.AddClaims();
            _builder.AddClaim("access_token", claims.FirstOrDefault(c =>
                                                                    c.Type.Equals("http://schemas.u2uconsult.com/ws/2014/03/identity/claims/accesstoken"))
                              ?.Value);
            _builder.AddClaim("id", claims.FirstOrDefault(c =>
                                                          c.Type.Equals("http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier"))
                              ?.Value);
            _builder.AddClaim("name", claims.FirstOrDefault(c =>
                                                            c.Type.Equals("http://schemas.u2uconsult.com/ws/2014/04/identity/claims/displayname"))
                              ?.Value);
            _builder.AddClaim("email", claims.FirstOrDefault(c =>
                                                             c.Type.Equals("http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress"))
                              ?.Value);


            return(_builder.Encode());
        }
예제 #18
0
        public void EncodeTest2()
        {
            var builder = new JwtBuilder
            {
                Id        = Guid.NewGuid() + "",
                Subject   = "Cube",
                Issuer    = "NewLife",
                IssuedAt  = DateTime.Now,
                Audience  = "all",
                NotBefore = DateTime.Today.AddDays(1),
                //Expire = TimeSpan.FromHours(0),
                Secret = "Smart",
            };

            var token = builder.Encode(new { sub = "0201", name = "stone" });

            Assert.NotNull(token);
            Assert.NotEmpty(token);

            var builder2 = new JwtBuilder
            {
                Secret = builder.Secret,
            };

            var rs = builder2.TryDecode(token, out var payload);

            Assert.True(rs);
            Assert.NotEqual(builder.Subject, builder2.Subject);
            Assert.Equal("0201", builder2.Subject);
            Assert.Null(builder2.Type);

            Assert.Equal(builder.Id, builder2.Id);
            Assert.Equal(builder.Issuer, builder2.Issuer);
            Assert.Equal(builder.IssuedAt.Trim(), builder2.IssuedAt.Trim());
            Assert.Equal(builder.Audience, builder2.Audience);
            Assert.Equal(builder.NotBefore, builder2.NotBefore);
            Assert.Equal("stone", builder2["name"]);
        }
예제 #19
0
        public void EncodeTest()
        {
            var builder = new JwtBuilder
            {
                //Id = null,
                //Subject = "Cube",
                //Issuer = "NewLife",
                IssuedAt = 1516239022.ToDateTime(),
                Expire   = TimeSpan.FromHours(0),
                Secret   = "Smart",
            };

            var token = builder.Encode(new { sub = "0201", name = "stone" });

            Assert.NotNull(token);
            Assert.NotEmpty(token);

            var ts = token.Split('.');

            Assert.Equal(3, ts.Length);
            Assert.Equal("eyJhbGciOiJIUzI1NiJ9", ts[0]);
            Assert.Equal("eyJzdWIiOiIwMjAxIiwibmFtZSI6InN0b25lIiwiaWF0IjoxNTE2MjM5MDIyfQ", ts[1]);
            Assert.Equal("mY2_rvQORkyYpK3f84liG2EDpaYY7pO43sRgcli381U", ts[2]);
        }
예제 #20
0
        /// <summary>
        /// Encrypts the given Identity object into a string.
        /// </summary>
        /// <param name="encryptionObject"></param>
        /// <returns>Encrypted JWT string representation of the given object.</returns>
        public string Encode(IIdentityProvider encryptionObject)
        {
            JwtBuilder builder = CreateJwtBuilderWithClaims(encryptionObject);

            return(builder.Encode());
        }
예제 #21
0
        public void RS512()
        {
            var prvKey = @"-----BEGIN RSA PRIVATE KEY-----
MIIEogIBAAKCAQEAnzyis1ZjfNB0bBgKFMSvvkTtwlvBsaJq7S5wA+kzeVOVpVWw
kWdVha4s38XM/pa/yr47av7+z3VTmvDRyAHcaT92whREFpLv9cj5lTeJSibyr/Mr
m/YtjCZVWgaOYIhwrXwKLqPr/11inWsAkfIytvHWTxZYEcXLgAXFuUuaS3uF9gEi
NQwzGTU1v0FqkqTBr4B8nW3HCN47XUu0t8Y0e+lf4s4OxQawWD79J9/5d3Ry0vbV
3Am1FtGJiJvOwRsIfVChDpYStTcHTCMqtvWbV6L11BWkpzGXSW4Hv43qa+GSYOD2
QU68Mb59oSk2OB+BtOLpJofmbGEGgvmwyCI9MwIDAQABAoIBACiARq2wkltjtcjs
kFvZ7w1JAORHbEufEO1Eu27zOIlqbgyAcAl7q+/1bip4Z/x1IVES84/yTaM8p0go
amMhvgry/mS8vNi1BN2SAZEnb/7xSxbflb70bX9RHLJqKnp5GZe2jexw+wyXlwaM
+bclUCrh9e1ltH7IvUrRrQnFJfh+is1fRon9Co9Li0GwoN0x0byrrngU8Ak3Y6D9
D8GjQA4Elm94ST3izJv8iCOLSDBmzsPsXfcCUZfmTfZ5DbUDMbMxRnSo3nQeoKGC
0Lj9FkWcfmLcpGlSXTO+Ww1L7EGq+PT3NtRae1FZPwjddQ1/4V905kyQFLamAA5Y
lSpE2wkCgYEAy1OPLQcZt4NQnQzPz2SBJqQN2P5u3vXl+zNVKP8w4eBv0vWuJJF+
hkGNnSxXQrTkvDOIUddSKOzHHgSg4nY6K02ecyT0PPm/UZvtRpWrnBjcEVtHEJNp
bU9pLD5iZ0J9sbzPU/LxPmuAP2Bs8JmTn6aFRspFrP7W0s1Nmk2jsm0CgYEAyH0X
+jpoqxj4efZfkUrg5GbSEhf+dZglf0tTOA5bVg8IYwtmNk/pniLG/zI7c+GlTc9B
BwfMr59EzBq/eFMI7+LgXaVUsM/sS4Ry+yeK6SJx/otIMWtDfqxsLD8CPMCRvecC
2Pip4uSgrl0MOebl9XKp57GoaUWRWRHqwV4Y6h8CgYAZhI4mh4qZtnhKjY4TKDjx
QYufXSdLAi9v3FxmvchDwOgn4L+PRVdMwDNms2bsL0m5uPn104EzM6w1vzz1zwKz
5pTpPI0OjgWN13Tq8+PKvm/4Ga2MjgOgPWQkslulO/oMcXbPwWC3hcRdr9tcQtn9
Imf9n2spL/6EDFId+Hp/7QKBgAqlWdiXsWckdE1Fn91/NGHsc8syKvjjk1onDcw0
NvVi5vcba9oGdElJX3e9mxqUKMrw7msJJv1MX8LWyMQC5L6YNYHDfbPF1q5L4i8j
8mRex97UVokJQRRA452V2vCO6S5ETgpnad36de3MUxHgCOX3qL382Qx9/THVmbma
3YfRAoGAUxL/Eu5yvMK8SAt/dJK6FedngcM3JEFNplmtLYVLWhkIlNRGDwkg3I5K
y18Ae9n7dHVueyslrb6weq7dTkYDi3iOYRW8HRkIQh06wEdbxt0shTzAJvvCQfrB
jg/3747WSsf/zBTcHihTRBdAv6OmdhV4/dD5YBfLAkLrd+mX7iE=
-----END RSA PRIVATE KEY-----";
            var pubKey = @"-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnzyis1ZjfNB0bBgKFMSv
vkTtwlvBsaJq7S5wA+kzeVOVpVWwkWdVha4s38XM/pa/yr47av7+z3VTmvDRyAHc
aT92whREFpLv9cj5lTeJSibyr/Mrm/YtjCZVWgaOYIhwrXwKLqPr/11inWsAkfIy
tvHWTxZYEcXLgAXFuUuaS3uF9gEiNQwzGTU1v0FqkqTBr4B8nW3HCN47XUu0t8Y0
e+lf4s4OxQawWD79J9/5d3Ry0vbV3Am1FtGJiJvOwRsIfVChDpYStTcHTCMqtvWb
V6L11BWkpzGXSW4Hv43qa+GSYOD2QU68Mb59oSk2OB+BtOLpJofmbGEGgvmwyCI9
MwIDAQAB
-----END PUBLIC KEY-----";

            var builder = new JwtBuilder
            {
                Algorithm = "RS512",
                Type      = "JWT",

                IssuedAt = 1516239022.ToDateTime(),
                Expire   = DateTime.MinValue,
                Secret   = prvKey,
            };

            var token = builder.Encode(new { sub = "1234567890", name = "NewLife", admin = true });

            Assert.NotNull(token);
            Assert.NotEmpty(token);

            var ts = token.Split('.');

            Assert.Equal(3, ts.Length);
            Assert.Equal("eyJhbGciOiJSUzUxMiIsInR5cCI6IkpXVCJ9", ts[0]);
            Assert.Equal("eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6Ik5ld0xpZmUiLCJhZG1pbiI6dHJ1ZSwiaWF0IjoxNTE2MjM5MDIyfQ", ts[1]);
            Assert.Equal("dCReA3hZnLnvXKIK7zqDp2Ej5by_ePnRNCrRwz83Gz92YZeeKkaTPY-orOmWskJO3L1Lh2F4Sv8H3KR6p0KI35LQ2qdF3xnPchHI3p6oDJYSBnNb0vCSVG5sYKoCWEjC932BbNmohiaa62YNFla6XPt6_d2pDoqg-D-Q5Jfrj_-1mMGZxj4lOyILkaKyohM_C1OiFN8hlHKihOBXS1ER27btQcggueAUWZPBa1fzRqCU10r9yQLmnJm9K3F9HPLCTy4xgdc5vpI8wLZ1ylHjkHMAYaJyBFrX9T70iaruiG3tW3VXzv4ptGcnd3oUd__V9m_DHrfNFYh1Gy0a8JeeLQ", ts[2]);

            var builder2 = new JwtBuilder
            {
                Algorithm = "RS512",

                Secret = pubKey,
            };
            var rs = builder2.TryDecode(token, out var msg);

            Assert.True(rs);
            Assert.Null(msg);

            Assert.Equal("JWT", builder2.Type);
            Assert.Equal("1234567890", builder2.Subject);
            Assert.Equal("NewLife", builder2["name"]);
            Assert.True(builder2["admin"].ToBoolean());
        }
예제 #22
0
        public void RS384()
        {
            var prvKey = @"-----BEGIN RSA PRIVATE KEY-----
MIIEogIBAAKCAQEAnzyis1ZjfNB0bBgKFMSvvkTtwlvBsaJq7S5wA+kzeVOVpVWw
kWdVha4s38XM/pa/yr47av7+z3VTmvDRyAHcaT92whREFpLv9cj5lTeJSibyr/Mr
m/YtjCZVWgaOYIhwrXwKLqPr/11inWsAkfIytvHWTxZYEcXLgAXFuUuaS3uF9gEi
NQwzGTU1v0FqkqTBr4B8nW3HCN47XUu0t8Y0e+lf4s4OxQawWD79J9/5d3Ry0vbV
3Am1FtGJiJvOwRsIfVChDpYStTcHTCMqtvWbV6L11BWkpzGXSW4Hv43qa+GSYOD2
QU68Mb59oSk2OB+BtOLpJofmbGEGgvmwyCI9MwIDAQABAoIBACiARq2wkltjtcjs
kFvZ7w1JAORHbEufEO1Eu27zOIlqbgyAcAl7q+/1bip4Z/x1IVES84/yTaM8p0go
amMhvgry/mS8vNi1BN2SAZEnb/7xSxbflb70bX9RHLJqKnp5GZe2jexw+wyXlwaM
+bclUCrh9e1ltH7IvUrRrQnFJfh+is1fRon9Co9Li0GwoN0x0byrrngU8Ak3Y6D9
D8GjQA4Elm94ST3izJv8iCOLSDBmzsPsXfcCUZfmTfZ5DbUDMbMxRnSo3nQeoKGC
0Lj9FkWcfmLcpGlSXTO+Ww1L7EGq+PT3NtRae1FZPwjddQ1/4V905kyQFLamAA5Y
lSpE2wkCgYEAy1OPLQcZt4NQnQzPz2SBJqQN2P5u3vXl+zNVKP8w4eBv0vWuJJF+
hkGNnSxXQrTkvDOIUddSKOzHHgSg4nY6K02ecyT0PPm/UZvtRpWrnBjcEVtHEJNp
bU9pLD5iZ0J9sbzPU/LxPmuAP2Bs8JmTn6aFRspFrP7W0s1Nmk2jsm0CgYEAyH0X
+jpoqxj4efZfkUrg5GbSEhf+dZglf0tTOA5bVg8IYwtmNk/pniLG/zI7c+GlTc9B
BwfMr59EzBq/eFMI7+LgXaVUsM/sS4Ry+yeK6SJx/otIMWtDfqxsLD8CPMCRvecC
2Pip4uSgrl0MOebl9XKp57GoaUWRWRHqwV4Y6h8CgYAZhI4mh4qZtnhKjY4TKDjx
QYufXSdLAi9v3FxmvchDwOgn4L+PRVdMwDNms2bsL0m5uPn104EzM6w1vzz1zwKz
5pTpPI0OjgWN13Tq8+PKvm/4Ga2MjgOgPWQkslulO/oMcXbPwWC3hcRdr9tcQtn9
Imf9n2spL/6EDFId+Hp/7QKBgAqlWdiXsWckdE1Fn91/NGHsc8syKvjjk1onDcw0
NvVi5vcba9oGdElJX3e9mxqUKMrw7msJJv1MX8LWyMQC5L6YNYHDfbPF1q5L4i8j
8mRex97UVokJQRRA452V2vCO6S5ETgpnad36de3MUxHgCOX3qL382Qx9/THVmbma
3YfRAoGAUxL/Eu5yvMK8SAt/dJK6FedngcM3JEFNplmtLYVLWhkIlNRGDwkg3I5K
y18Ae9n7dHVueyslrb6weq7dTkYDi3iOYRW8HRkIQh06wEdbxt0shTzAJvvCQfrB
jg/3747WSsf/zBTcHihTRBdAv6OmdhV4/dD5YBfLAkLrd+mX7iE=
-----END RSA PRIVATE KEY-----";
            var pubKey = @"-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnzyis1ZjfNB0bBgKFMSv
vkTtwlvBsaJq7S5wA+kzeVOVpVWwkWdVha4s38XM/pa/yr47av7+z3VTmvDRyAHc
aT92whREFpLv9cj5lTeJSibyr/Mrm/YtjCZVWgaOYIhwrXwKLqPr/11inWsAkfIy
tvHWTxZYEcXLgAXFuUuaS3uF9gEiNQwzGTU1v0FqkqTBr4B8nW3HCN47XUu0t8Y0
e+lf4s4OxQawWD79J9/5d3Ry0vbV3Am1FtGJiJvOwRsIfVChDpYStTcHTCMqtvWb
V6L11BWkpzGXSW4Hv43qa+GSYOD2QU68Mb59oSk2OB+BtOLpJofmbGEGgvmwyCI9
MwIDAQAB
-----END PUBLIC KEY-----";

            var builder = new JwtBuilder
            {
                Algorithm = "RS384",
                Type      = "JWT",

                IssuedAt = 1516239022.ToDateTime(),
                Expire   = DateTime.MinValue,
                Secret   = prvKey,
            };

            var token = builder.Encode(new { sub = "1234567890", name = "NewLife", admin = true });

            Assert.NotNull(token);
            Assert.NotEmpty(token);

            var ts = token.Split('.');

            Assert.Equal(3, ts.Length);
            Assert.Equal("eyJhbGciOiJSUzM4NCIsInR5cCI6IkpXVCJ9", ts[0]);
            Assert.Equal("eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6Ik5ld0xpZmUiLCJhZG1pbiI6dHJ1ZSwiaWF0IjoxNTE2MjM5MDIyfQ", ts[1]);
            Assert.Equal("g3j77PXjYeroUclchX5SSCyyv1HjEuJRsRf8UhovRIInn1JVwmemofWJTtIt9AOlymBZdA8k6zpjdDV_AfV7uxkUmCM4vIQarBPviZZY4yp-4PCqfsAIfPeTPkRHHJmcmDNyvVHFzNqNLsrzzSvSG7O3MeKYKbjqHb5rCu38AF0gqwvGh08WyY91rVwV22ipJN16DLyp2nk8SC0lqvGKyypsUwf70XxXo_6wvekSb9Vbh6c57_513BkjFR5fVjcpqOfaIB9Lkj_tKH1ze7hWU6_xfAyYYQ3jPFCivBtRVFFjB5PrKHku3Z0DhFsDiM6zOIAoHgwII-ry0wwxYd7LUg", ts[2]);

            var builder2 = new JwtBuilder
            {
                Algorithm = "RS384",

                Secret = pubKey,
            };
            var rs = builder2.TryDecode(token, out var msg);

            Assert.True(rs);
            Assert.Null(msg);

            Assert.Equal("JWT", builder2.Type);
            Assert.Equal("1234567890", builder2.Subject);
            Assert.Equal("NewLife", builder2["name"]);
            Assert.True(builder2["admin"].ToBoolean());
        }
예제 #23
0
        public void RS256()
        {
            var prvKey = @"-----BEGIN RSA PRIVATE KEY-----
MIIEogIBAAKCAQEAnzyis1ZjfNB0bBgKFMSvvkTtwlvBsaJq7S5wA+kzeVOVpVWw
kWdVha4s38XM/pa/yr47av7+z3VTmvDRyAHcaT92whREFpLv9cj5lTeJSibyr/Mr
m/YtjCZVWgaOYIhwrXwKLqPr/11inWsAkfIytvHWTxZYEcXLgAXFuUuaS3uF9gEi
NQwzGTU1v0FqkqTBr4B8nW3HCN47XUu0t8Y0e+lf4s4OxQawWD79J9/5d3Ry0vbV
3Am1FtGJiJvOwRsIfVChDpYStTcHTCMqtvWbV6L11BWkpzGXSW4Hv43qa+GSYOD2
QU68Mb59oSk2OB+BtOLpJofmbGEGgvmwyCI9MwIDAQABAoIBACiARq2wkltjtcjs
kFvZ7w1JAORHbEufEO1Eu27zOIlqbgyAcAl7q+/1bip4Z/x1IVES84/yTaM8p0go
amMhvgry/mS8vNi1BN2SAZEnb/7xSxbflb70bX9RHLJqKnp5GZe2jexw+wyXlwaM
+bclUCrh9e1ltH7IvUrRrQnFJfh+is1fRon9Co9Li0GwoN0x0byrrngU8Ak3Y6D9
D8GjQA4Elm94ST3izJv8iCOLSDBmzsPsXfcCUZfmTfZ5DbUDMbMxRnSo3nQeoKGC
0Lj9FkWcfmLcpGlSXTO+Ww1L7EGq+PT3NtRae1FZPwjddQ1/4V905kyQFLamAA5Y
lSpE2wkCgYEAy1OPLQcZt4NQnQzPz2SBJqQN2P5u3vXl+zNVKP8w4eBv0vWuJJF+
hkGNnSxXQrTkvDOIUddSKOzHHgSg4nY6K02ecyT0PPm/UZvtRpWrnBjcEVtHEJNp
bU9pLD5iZ0J9sbzPU/LxPmuAP2Bs8JmTn6aFRspFrP7W0s1Nmk2jsm0CgYEAyH0X
+jpoqxj4efZfkUrg5GbSEhf+dZglf0tTOA5bVg8IYwtmNk/pniLG/zI7c+GlTc9B
BwfMr59EzBq/eFMI7+LgXaVUsM/sS4Ry+yeK6SJx/otIMWtDfqxsLD8CPMCRvecC
2Pip4uSgrl0MOebl9XKp57GoaUWRWRHqwV4Y6h8CgYAZhI4mh4qZtnhKjY4TKDjx
QYufXSdLAi9v3FxmvchDwOgn4L+PRVdMwDNms2bsL0m5uPn104EzM6w1vzz1zwKz
5pTpPI0OjgWN13Tq8+PKvm/4Ga2MjgOgPWQkslulO/oMcXbPwWC3hcRdr9tcQtn9
Imf9n2spL/6EDFId+Hp/7QKBgAqlWdiXsWckdE1Fn91/NGHsc8syKvjjk1onDcw0
NvVi5vcba9oGdElJX3e9mxqUKMrw7msJJv1MX8LWyMQC5L6YNYHDfbPF1q5L4i8j
8mRex97UVokJQRRA452V2vCO6S5ETgpnad36de3MUxHgCOX3qL382Qx9/THVmbma
3YfRAoGAUxL/Eu5yvMK8SAt/dJK6FedngcM3JEFNplmtLYVLWhkIlNRGDwkg3I5K
y18Ae9n7dHVueyslrb6weq7dTkYDi3iOYRW8HRkIQh06wEdbxt0shTzAJvvCQfrB
jg/3747WSsf/zBTcHihTRBdAv6OmdhV4/dD5YBfLAkLrd+mX7iE=
-----END RSA PRIVATE KEY-----";
            var pubKey = @"-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnzyis1ZjfNB0bBgKFMSv
vkTtwlvBsaJq7S5wA+kzeVOVpVWwkWdVha4s38XM/pa/yr47av7+z3VTmvDRyAHc
aT92whREFpLv9cj5lTeJSibyr/Mrm/YtjCZVWgaOYIhwrXwKLqPr/11inWsAkfIy
tvHWTxZYEcXLgAXFuUuaS3uF9gEiNQwzGTU1v0FqkqTBr4B8nW3HCN47XUu0t8Y0
e+lf4s4OxQawWD79J9/5d3Ry0vbV3Am1FtGJiJvOwRsIfVChDpYStTcHTCMqtvWb
V6L11BWkpzGXSW4Hv43qa+GSYOD2QU68Mb59oSk2OB+BtOLpJofmbGEGgvmwyCI9
MwIDAQAB
-----END PUBLIC KEY-----";

            var builder = new JwtBuilder
            {
                Algorithm = "RS256",
                Type      = "JWT",

                IssuedAt = 1516239022.ToDateTime(),
                Expire   = DateTime.MinValue,
                Secret   = prvKey,
            };

            var token = builder.Encode(new { sub = "1234567890", name = "NewLife", admin = true });

            Assert.NotNull(token);
            Assert.NotEmpty(token);

            var ts = token.Split('.');

            Assert.Equal(3, ts.Length);
            Assert.Equal("eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9", ts[0]);
            Assert.Equal("eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6Ik5ld0xpZmUiLCJhZG1pbiI6dHJ1ZSwiaWF0IjoxNTE2MjM5MDIyfQ", ts[1]);
            Assert.Equal("N4Ca2l1ucFoLtVLyU2dC4PKOW7wkEnjUXYb129_Jh8DFD9EGHIe70cSgy5ZYA6PvhZ3XT5PADpjy7-uwXCFfgww3_ChfPye2GJLy_cDOz7XcoJ-kFy_-83AUb73AjDLrMQ5M1_5WRVHl_Nw2E52b5cKuczwU3kdSVF3wEwgS3ku8xPz4iN6eOpfUOh5cjei0S4uwLLPYCf56KY7zbXlf5PXDpX5iQ098PAzvDJRf7jv21GEwaKRRdY8V8wpnPV6lDVp92qR8E2lGMA082WQWZf0RBDloG7EauulMPXiM43FE7DXBKSdbkXyFmky-xjWkCnLxSjKpVHpRS41vdFZgtA", ts[2]);

            var builder2 = new JwtBuilder
            {
                Algorithm = "RS256",

                Secret = pubKey,
            };
            var rs = builder2.TryDecode(token, out var msg);

            Assert.True(rs);
            Assert.Null(msg);

            Assert.Equal("JWT", builder2.Type);
            Assert.Equal("1234567890", builder2.Subject);
            Assert.Equal("NewLife", builder2["name"]);
            Assert.True(builder2["admin"].ToBoolean());
        }