簡體   English   中英

僅在部署到IIS之后,Azure API上出現403錯誤

[英]403 Error on Azure API Only After Deploying to IIS

我想我已經讀過互聯網上的每件事(我知道這是粗體的說法),但我無法解決...

我有一個非常簡單的網頁,可以在Azure上獲取狀態VM,在我的計算機上可以正常運行。 我使用makecert在本地計算機上創建了一個證書,並且調試運行良好。 將其部署到IIS上的另一台服務器后,我得到的是403錯誤。

我嘗試過的事情:

  1. 使用私鑰從我的開發機中導出證書並導入到測試服務器中
  2. 使用makecert創建新證書(編輯:在要部署到的服務器上重新創建了證書)(根據MSN的此鏈接),上傳到Azure,更新代碼以搜索新的指紋,重新部署並欣賞相同的錯誤消息。
  3. 兩次我都將應用程序池標識更改為可登錄(並且已還原)的用戶帳戶
  4. 嘗試使用cert作為本地計算機和當前用戶,並在應用程序池中更新了用戶

我更改了獲取證書代碼,使其更類似於類似問題的答案,但是發現該證書似乎不是問題所在。如果我刪除了在服務器上創建的證書,則會收到另一個錯誤。

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;

參考: 如何通過IIS中的C#連接到Azure(管理)Rest API

創建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%從此處復制粘貼

在這種情況下,我的解決方法是通過powershell創建一個新的Publishsettings文件,然后通過powershell將其導入服務器。 然后使用代碼中的指紋。 無論出於何種原因,在服務器上制作證書並上傳到Azure仍然不起作用...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM