c# - 仅在部署到 IIS 后 Azure API 出现 403 错误

标签 c# asp.net iis azure ssl

我想我已经阅读了互联网上有关此问题的所有内容(我知道这是大胆的声明),但我无法解决......

我有一个非常简单的网页,可以获取 Azure 上虚拟机的状态,它在我的计算机上运行良好。我使用 makecert 在本地计算机上创建了一个证书,并且调试运行良好。 将其部署到 IIS 上的另一台服务器后,我得到的只是 403 错误。

我尝试过的事情:

  1. 使用私钥从我的开发机器导出证书并导入到测试服务器
  2. 使用 makecert 创建新证书(编辑:在我想要部署到的服务器上重新创建了证书)(根据 MSN 中的此链接),上传到 Azure,更新代码以搜索新指纹,重新部署并欣赏相同的错误消息..
  3. 两次我都将应用程序池身份更改为可登录(并恢复)的用户帐户
  4. 尝试以本地计算机和当前用户身份使用证书,并在应用池中更新用户

我更改了获取证书代码,使其更像类似问题的答案,但找到证书似乎不是问题。如果我删除在服务器上创建的证书,则会收到不同的错误。

var store = new X509Store(StoreName.My, StoreLocation.CurrentUser);  
store.Open(OpenFlags.OpenExistingOnly | OpenFlags.ReadOnly);

var certificate = store.Certificates.Cast<X509Certificate2>().SingleOrDefault(c => string.Equals(c.Thumbprint, thumbprint, StringComparison.OrdinalIgnoreCase));  // please replace CertificateThumbprint with original Thumbprint

        return certificate;

引用号:how to connect to azure (management) rest api via C# in IIS

创建 HttpClient 的代码:

WebRequestHandler handler = new WebRequestHandler();
String CertThumbprint = _certthumbprint;
X509Certificate2 managementCert = FindX509Certificate(CertThumbprint);
if (managementCert != null)
{
   handler.ClientCertificates.Add(managementCert);
   HttpClient httpClient = new HttpClient(handler);
   httpClient.DefaultRequestHeaders.Add("x-ms-version", "2014-05-01");
   httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/xml"));
            return httpClient;
        }

检索虚拟机代码:

String uri = String.Format("https://management.core.windows.net/{0}/services/hostedservices/{1}/deploymentslots/{2}", _subscriptionid, ServiceName, "Production");
            XDocument vms = new XDocument();
            vms.Add(new XElement("VirtualMachines"));
            ApplyNamespace(vms.Root, ns);

            try
            {
                HttpClient http = GetHttpClient();
                Stream responseStream = await http.GetStreamAsync(uri);

                if (responseStream != null)
                {
                    XDocument xml = XDocument.Load(responseStream);
                    var roles = xml.Root.Descendants(ns + "RoleInstance");
                    foreach (XElement r in roles)
                    {
                        XElement svcNamee1 = new XElement("ServiceName", ServiceName);
                        ApplyNamespace(svcNamee1, ns);
                        r.Add(svcNamee1);
                        vms.Root.Add(r);
                    }
                }

            }

此代码目前大约 95% 是从 here 复制粘贴的

最佳答案

在这种情况下,我的解决方案是通过 powershell 创建一个新的 Publishsettings 文件,并通过 powershell 将其导入到服务器上。然后在代码中使用指纹。无论出于何种原因,在服务器上制作证书并上传到 Azure 仍然不起作用...

关于c# - 仅在部署到 IIS 后 Azure API 出现 403 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24269912/

相关文章:

iis - WebDeploy (401) 未授权错误

c# - 转换 base64 字符串时出错

c# - 在VS2012中使用转储文件进行调试

asp.net - Web (asp.net) 环境中长时间运行的操作(线程)

asp.net - 在 IIS 上运行的 ASP.net 页面是否使用多核处理器?

asp.net-mvc - 在 Vista Home Premium 上的 IIS 中托管 ASP.NET MVC 时,css/图像不显示

c# - 在单个语句中使用 Nunit 测试参数

c# - 在 FromBody 中接收一个 PostAsync 作为参数

.net - ErrorMessage 样式化 ASP.NET

C# 获取完整文件路径