Exemplo n.º 1
0
        public static string CalcAuthorizationBearer(string userKey, string privateKey)
        {
            const string algorithm = "RS256";
            const string jwtName   = "JWT";
            const string hAlg      = "SHA256";

            var header = new GSObject(new
            {
                alg = algorithm,
                typ = jwtName,
                kid = userKey
            });

            var epochTime = new DateTime(1970, 1, 1);
            var issued    = (long)DateTime.UtcNow.Subtract(epochTime).TotalSeconds;
            var payload   = new GSObject(new
            {
                iat = issued,
                jti = Guid.NewGuid().ToString()
            });

            var headerBytes  = Encoding.UTF8.GetBytes(header.ToJsonString());
            var payloadBytes = Encoding.UTF8.GetBytes(payload.ToJsonString());

            var baseString = string.Join(".",
                                         new[] { Convert.ToBase64String(headerBytes), Convert.ToBase64String(payloadBytes) });

            using (var rsa = RsaUtils.DecodeRsaPrivateKey(privateKey))
            {
                var signature       = rsa.SignData(Encoding.UTF8.GetBytes(baseString), hAlg);
                var signatureString = Convert.ToBase64String(signature);
                return("Bearer " + string.Join(".", new[] { baseString, signatureString }));
            }
        }