![](/img/trans.png)
[英]Getting 403 Forbidden when Authenticating Non-Interactively to Azure REST API for PowerBi Embedded Report
[英]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 permissions
和user_impersonation
。
請參閱本文以使用資源管理器身份驗證API。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.