6

當試圖訪問使用我收到錯誤的圖表服務客戶:圖形API - 足夠的權限來完成操作

代碼:Authorization_RequestDenied
消息:權限不足來完成操作。

研究此錯誤後,最常見的解決方案是設置API的權限。這已經完成,並有權讀取基本/完整配置文件。

我刪除並重新添加了API。

下面是我AzureAuthenticationProvider類的代碼從IAuthenticationProvider繼承:

public class AzureAuthenticationProvider : IAuthenticationProvider 
    { 
private string _azureDomain = "myDevDom.onmicrosoft.com"; 

    public async Task AuthenticateRequestAsync(HttpRequestMessage request) 
    { 
     try 
     { 
      string clientId = "2b823c67-1b0d-4a10-a9e1-737142516f5q"; 
      string clientSecret = "xxxxxx"; 

      AuthenticationContext authContext = new AuthenticationContext("https://login.windows.net/" + _azureDomain + "/oauth2/token"); 

      ClientCredential credentials = new ClientCredential(clientId, clientSecret); 

      AuthenticationResult authResult = await authContext.AcquireTokenAsync("https://graph.microsoft.com/", credentials); 

      request.Headers.Add("Authorization", "Bearer " + authResult.AccessToken); 
     } 
     catch (Exception ex) 
     { 
     } 
    } 

我試圖改變用戶端祕密無效的ID,並把它扔到了一個錯誤,所以客戶端密鑰是正確的。我也嘗試通過更改訪問令牌來驗證訪問令牌是否有效,這也會返回錯誤。

上面的代碼似乎工作正常。

下面就是我試圖訪問Azure的AD代碼:任何幫助

 public async Task<IGraphServiceUsersCollectionPage> GetUsersByLastName(string lastname) 
    { 
     GraphServiceClient graphClient = new GraphServiceClient(new AzureAuthenticationProvider()); 
     string filter = String.Format("startswith(surname, '{0}')", lastname); 
     IGraphServiceUsersCollectionPage users = await graphClient.Users.Request().Filter(filter).GetAsync(); //Fails on this line 
     return users; 
    } 

任何幫助是非常讚賞,並感謝提前。 azureADpermissionProperties

+0

您準確添加了哪些權限?你可以張貼截圖嗎?你需要的是*應用程序權限*來讀取用戶。 – juunas

+0

感謝您申請權限下的建議我選擇了「讀取和寫入目錄數據」,並在委派的權限下,我已經'登錄並閱讀用戶個人資料''真正的所有用戶的基本個人資料'和'作爲簽名訪問firectory在用戶'。儘管爲了在開發應用程序中進行測試,我已經選擇了所有可用的選項,但仍然遇到了身份驗證錯誤。 – j9070749

+1

委託權限對於此API調用無關緊要。您正在進行僅應用程序調用(指定客戶端ID和密碼)。你是否也授予了權限?你可以檢查例如訪問令牌的內容。 jwt.io – juunas

回答

2

請參考下面的步驟:

  1. 從你的截圖,看來你授予Windows Azure Active Directory(蔚藍廣告圖形API)Read and write directory data應用程序的權限。由於使用的是Microsoft圖(https://graph.microsoft.com/),您需要授予應用程序權限Microsoft Graphenter image description here

  2. 因爲你在你的AAD管理員,您可以通過點擊Grant permission按鈕,在上面的截圖中顯示的權限授予在組織中的用戶。

  3. 然後您可以使用您的代碼(客戶端憑證流獲取令牌)和查詢用戶信息。如果您檢查由azure廣告發布的訪問令牌中的聲明,您可以在roles聲明中找到Directory.Read.All權限。

+0

謝謝你的幫助。抱歉,屏幕截圖混淆了,但我實際上也授予了Microsoft圖的權限。我認爲問題可能是我不是管理員,儘管我已經選擇了應用程序的權限,但我無法授予權限(我收到一個錯誤,指出'未授予應用程序權限'。目前正在測試這個我是Azure AD的管理員的過程。再次感謝您的建議。 – j9070749

0

看起來您的應用似乎沒有足夠的權限訪問AD信息。您可以按照以下鏈接/文章中提到的步驟登錄到Azure門戶並查看您的應用程序是否具有足夠的特權來訪問AD。

http://www.morgantechspace.com/2016/01/graph-api-insufficient-privileges-to-complete-the-operation.html

https://docs.microsoft.com/en-us/azure/active-directory-b2c/active-directory-b2c-devquickstarts-graph-dotnet

而且我希望,在 「authResult.AccessToken」 是不是在你的情況下空。 有一件事,上面的第二個鏈接對AD的應用程序訪問權有非常詳細的解釋。可能對你有幫助。

+0

訪問令牌不爲空,看起來有效。如果我在運行時更改訪問令牌,則會得到不同的錯誤,這表明該方法返回的訪問令牌是正確的。我爲OP添加了一個截圖。謝謝 – j9070749

0

假設你想創建一個蔚藍的活動目錄 組,我必須表演下面的步驟來解決這個問題

  1. AD>應用註冊>您的應用程序
  2. 選擇所需的權限
  3. 單擊添加並選擇Microsoft Graph並添加它
  4. select Microsoft Graph
  5. 選擇讀取和寫入所有組從委派的權限列表
  6. 並保存
  7. 選擇的Windows Azure Active Directory和授予所有應用程序的權限
  8. 保存
1

Grant permission 確保點擊「授予權限「,並且對於所有用戶帳戶均爲」是「。

1

在某些情況下,實際問題發生是因爲我們使用「應用程序權限」而不是「委派權限」。在我的應用程序中,我試圖列出所有具有應用程序權限的用戶,但它不起作用。當我切換到委託權限時,它就起作用了。

所以,一些快速的檢查將是這樣的:

  1. 檢查,如果你正在使用微軟圖形API或別的東西
  2. 使用委託權限
  3. 點擊授予權限按鈕傳播權限:)

希望這可以幫助某人。

相關問題