asp.net – X509Certificate2 – 系统找不到指定的路径
发布时间:2020-12-16 04:20:15 所属栏目:asp.Net 来源:网络整理
导读:我希望通过服务帐户获取Google Analytics的数据. 当我第一次启动应用程序时,一切正常,我可以访问数据.但是,当我第二次启动应用程序时,出现以下错误:“系统找不到指定的路径”.你有个主意吗?我以为它可以锁定. 这是我的源代码: public static String GetAc
我希望通过服务帐户获取Google Analytics的数据.
当我第一次启动应用程序时,一切正常,我可以访问数据.但是,当我第二次启动应用程序时,出现以下错误:“系统找不到指定的路径”.你有个主意吗?我以为它可以锁定. 这是我的源代码: public static String GetAccessToken(string clientIdEMail,string keyFilePath,String scope) { // certificate var certificate = new X509Certificate2(keyFilePath,"notasecret",X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.Exportable); // header var header = new { typ = "JWT",alg = "RS256" }; // claimset var times = GetExpiryAndIssueDate(); var claimset = new { iss = clientIdEMail,scope = scope,aud = "https://accounts.google.com/o/oauth2/token",iat = times[0],exp = times[1],}; JavaScriptSerializer ser = new JavaScriptSerializer(); // encoded header var headerSerialized = ser.Serialize(header); var headerBytes = Encoding.UTF8.GetBytes(headerSerialized); var headerEncoded = Convert.ToBase64String(headerBytes); // encoded claimset var claimsetSerialized = ser.Serialize(claimset); var claimsetBytes = Encoding.UTF8.GetBytes(claimsetSerialized); var claimsetEncoded = Convert.ToBase64String(claimsetBytes); // input var input = headerEncoded + "." + claimsetEncoded; var inputBytes = Encoding.UTF8.GetBytes(input); // signiture var rsa = certificate.PrivateKey as RSACryptoServiceProvider; var cspParam = new CspParameters { KeyContainerName = rsa.CspKeyContainerInfo.KeyContainerName,KeyNumber = rsa.CspKeyContainerInfo.KeyNumber == KeyNumber.Exchange ? 1 : 2,Flags = CspProviderFlags.UseMachineKeyStore }; var aescsp = new RSACryptoServiceProvider(1024,cspParam) { PersistKeyInCsp = false }; var signatureBytes = aescsp.SignData(inputBytes,"SHA256"); var signatureEncoded = Convert.ToBase64String(signatureBytes); // jwt var jwt = headerEncoded + "." + claimsetEncoded + "." + signatureEncoded; var client = new WebClient(); client.Encoding = Encoding.UTF8; var uri = "https://accounts.google.com/o/oauth2/token"; var content = new NameValueCollection(); content["assertion"] = jwt; content["grant_type"] = "urn:ietf:params:oauth:grant-type:jwt-bearer"; string response = Encoding.UTF8.GetString(client.UploadValues(uri,"POST",content)); JsonGoogleResponse result = (ser.Deserialize<JsonGoogleResponse>(response)); return result.access_token; } 这是堆栈: à System.Security.Cryptography.CryptographicException.ThrowCryptogaphicException(Int32 hr) à System.Security.Cryptography.SafeProvHandle._FreeCSP(IntPtr pProvCtx) à System.Security.Cryptography.SafeProvHandle.ReleaseHandle() à System.Runtime.InteropServices.SafeHandle.InternalFinalize() à System.Runtime.InteropServices.SafeHandle.Dispose(Boolean disposing) à System.Runtime.InteropServices.SafeHandle.Finalize() 解决方法
如果您在IIS中运行,则需要在应用程序池的高级设置中将“加载用户配置文件”设置为True,以便能够通过文件名和文件加载证书.密码.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- [ASP.NET][C#]下载文件时中文文件名出现乱码
- asp.net – 微软的AJAX Toolkit与jQuery
- asp.net-mvc-3 – SignalR多个聊天室
- asp.net-mvc-3 – ViewBag在Extension Class中返回null
- asp.net – 保持负载均衡器在长时间运行期间超时
- asp.net-mvc – 构建为单个ASP.NET MVC应用程序的多个ASP.N
- asp.net-mvc-3 – MVC3 Ajax.ActionLink
- 如何在asp.net 3.5中使用NHibernate
- webmatrix – 我看不到ASP.NET网页管理
- 使用ASP.NET(C#)在不使用QueryString的情况下将变量从页面传
推荐文章
站长推荐
- asp.net-mvc – ASP.NET MVC可以在视图中使用接口
- 身份验证 – 如何为Asp.NET MVC 5创建ClaimsIden
- asp.net – 在App_Start中初始化和播种Identity的
- asp.net-mvc-3 – ASP.NET MVC 3 RTM项目中的这个
- 迁移WPF项目到.NET Core
- Intranet ASP.NET网站的Windows身份验证和重新出
- asp.net-mvc – MVC DB首先修复显示名称
- asp.net-mvc-3 – 将部分视图返回到同一视图
- asp.net – 如何从url中删除returnurl?
- asp.net-mvc – 如何将asp.net mvc集成到Web站点
热点阅读