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 })); } }