簡體   English   中英

我收到Azure REST API 403禁止錯誤

[英]I am getting Azure REST API 403 forbidden error

我必須通過azure函數按指定的時間表重新啟動雲服務實例。 為此,我正在使用Azure資源管理器API。 為此,我得到403錯誤。 1.我已經在Azure AD中創建了APP注冊。 2.賦予貢獻者角色。 3.在需要的地方使用了應用程序的客戶端ID,客戶端密鑰,租戶。 下面是代碼:

private static async Task<string> GetAccessToken(string tenantName, string clientId, string clientSecret)
    {
        var authString = "https://login.microsoftonline.com/" + tenantName;
        var resourceUrl = "https://management.core.windows.net/";
        var authenticationContext = new AuthenticationContext(authString, false);
        var clientCred = new ClientCredential(clientId, clientSecret);
        var authenticationResult = await authenticationContext.AcquireTokenAsync(resourceUrl, clientCred);
        var token = authenticationResult.AccessToken;
        return token; 
    }

    [FunctionName("RestartWorkerJob")]
    public static void Run([TimerTrigger("0 */1 * * * *")]TimerInfo myTimer, TraceWriter log)
    {
        var tenantName = "";
        var clientId = "";
        var clientSecret = "";

        var token = GetAccessToken(tenantName, clientId, clientSecret).Result;

        string url = "https://management.core.windows.net/{subscription_id}/services/hostedservices/testworkerrole/deployments/{deployment_name}/roleinstances/WorkerRole1_IN_0";

        var client = new HttpClient();
        var request = new HttpRequestMessage()
        {
            RequestUri = new Uri(url),
            Method = HttpMethod.Post
        };

        client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);
        client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/xml"));
        client.DefaultRequestHeaders.Add("x-ms-version", DateTime.UtcNow.ToShortDateString());
        client.DefaultRequestHeaders.Add(HttpRequestHeader.ContentLength.ToString(), "0");
        try
        {
            var task = client.SendAsync(request).ContinueWith((taskwithmsg) =>
            {
                var response = taskwithmsg.Result;

                var Text = response.Content.ReadAsStringAsync();

                if (response.IsSuccessStatusCode)
                {
                    log.Trace(new TraceEvent(System.Diagnostics.TraceLevel.Info, "Restart was successful"));
                }
                else
                {
                    log.Trace(new TraceEvent(System.Diagnostics.TraceLevel.Error, "Restart was unsuccessful"));
                }
            });
        }
        catch (Exception ex)
        {
            log.Trace(new TraceEvent(System.Diagnostics.TraceLevel.Error, ex.Message));
        }}

使用這種方法給我錯誤403-禁止。 服務器無法驗證請求。 驗證證書有效並與此預訂關聯。

我不明白這里出了什么問題。

錯誤403可能是由於權限問題或SPN過期引起的。

當您用天藍色廣告注冊Web應用程序時,對於API權限,請選擇“ Azure Service Management 選擇Delegated permissionsuser_impersonation

在此處輸入圖片說明

請參閱本文以使用資源管理器身份驗證API。

暫無
暫無

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

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