Esempio n. 1
0
        private RsaSecurityKey GetRSAPublicKey()
        {
            if (string.IsNullOrEmpty(publicKey) && !string.IsNullOrEmpty(PublicKeySavePath))
            {
                var physicalPath = PublicKeySavePath.Replace("~", ServerRootPath);
                if (File.Exists(physicalPath))
                {
                    var content = File.ReadAllText(physicalPath);
                    publicKey = content;
                    RSAParameters rp = ((FrameDLRObject)FrameDLRObject.CreateInstance(content, FrameDLRFlags.SensitiveCase)).ToModel <RSAParameters>(Encoding.Unicode);
                    publicSK = new RsaSecurityKey(rp);
                }
                else
                {
                    GlobalCommon.Logger.WriteLog(LoggerLevel.INFO, $"Rest验证读取PublicKey文件失败,原因是目录文件{PublicKeySavePath}不存在,请给出正确的公钥文件路径(请在验证的Logic中重载PublicKeySavePath的get方法),没有公钥会导致验证失败甚至出现异常");
                }
            }

            if (string.IsNullOrEmpty(publicKey))
            {
                GlobalCommon.Logger.WriteLog(LoggerLevel.INFO, $"Rest验证公钥不存在,没有公钥会导致验证失败甚至出现异常,如果本API服务提供生成Token的功能则请不要重载PublicKeySavePath和PrivateKeySavePath两个属性的get方法或在get时返回空串,如果不是则请提供正确的PublicKeySavePath路径值");
            }

            return(publicSK);
        }
Esempio n. 2
0
        /// <summary>
        /// 生成并保存 RSA 公钥与私钥
        /// </summary>
        /// <returns></returns>
        private void GenerateAndSaveKey()
        {
            if (privateKey == "")
            {
                RSA.Create();
                using (var rsa = new RSACryptoServiceProvider(2048))
                {
                    try
                    {
                        var privateKeys = rsa.ExportParameters(true);
                        var publicKeys  = rsa.ExportParameters(false);

                        privateSK = new RsaSecurityKey(privateKeys);
                        publicSK  = new RsaSecurityKey(publicKeys);

                        privateKey = FrameDLRObject.CreateInstance(privateKeys, FrameDLRFlags.SensitiveCase).tojsonstring(Encoding.Unicode);
                        publicKey  = FrameDLRObject.CreateInstance(publicKeys, FrameDLRFlags.SensitiveCase).tojsonstring(Encoding.Unicode);

                        if (!string.IsNullOrEmpty(PrivateKeySavePath))
                        {
                            GlobalCommon.Logger.WriteLog(LoggerLevel.INFO, $"RestAPI Token私有秘钥存放位置为{PrivateKeySavePath}");
                            var physicalPath = PrivateKeySavePath.Replace("~", ServerRootPath);
                            var dirPath      = Path.GetDirectoryName(physicalPath);
                            if (!Directory.Exists(dirPath))
                            {
                                Directory.CreateDirectory(dirPath);
                            }
                            File.WriteAllText(physicalPath, privateKey);
                        }
                        if (!string.IsNullOrEmpty(PublicKeySavePath))
                        {
                            GlobalCommon.Logger.WriteLog(LoggerLevel.INFO, $"RestAPI Token公有秘钥存放位置为{PublicKeySavePath}");
                            var physicalPath = PublicKeySavePath.Replace("~", ServerRootPath);
                            var dirPath      = Path.GetDirectoryName(physicalPath);
                            if (!Directory.Exists(dirPath))
                            {
                                Directory.CreateDirectory(dirPath);
                            }
                            File.WriteAllText(physicalPath, publicKey);
                        }
                    }
                    finally
                    {
                        rsa.PersistKeyInCsp = false;
                    }
                }
            }
        }