2017-08-30 138 views
1

我正嘗試使用Microsoft Graph API來更新Active Directory中的其他用戶。Microsoft Graph API - 沒有足夠的權限來完成操作

我在https://apps.dev.microsoft.com/

我請求以下範圍既爲用戶和應用程序設置以下權限:

  • Directory.ReadWrite.All
  • User.ReadWrite.All
  • Group.ReadWrite.All

我能夠得到一個listi目錄中的所有用戶的NG,但試圖更新時(在這種情況下,city)失敗:

GraphServiceClient graphClient = SDKHelper.GetAuthenticatedClient(); 
var usersResponse = graphClient.Users.Request().GetAsync(); 
var users = usersResponse.Result; 

// hard coding user id for now 
var userId = "9a5b83cd-85ff-4ad1-ab2f-b443941a518e"; 

var user = users.FirstOrDefault (m => m.Id == userId); 
if (user != null) { 
    user.City = "New York"; 
    await graphClient.Me.Request().UpdateAsync (user); 
} 

我得到:

{ 
    Code : Authorization_RequestDenied 
    Message : Insufficient privileges to complete the operation. 
    Inner error 
} 

我登錄的用戶作爲一個目錄的全局管理員。

我接過令牌JWT,領導交給https://jwt.io,這些都是我看到的角色:

  • Directory.Read.All
  • Directory.ReadWrite.All
  • Files.ReadWrite
  • Group.ReadWrite.All
  • Mail.Send
  • User.Read
  • User.Read.All
  • User.ReadWrite.All

我是否需要其他權限來實現這一目標?

在一天結束時,我想創建一個控制檯應用程序(而不是Web應用程序),以便可以更新目錄中的其他用戶信息。但我認爲使用Microsoft提供的這個示例應用程序是一個好的開始。

回答

1

您看到這個的原因是因爲您傳遞的是完整的user對象而不僅僅是city屬性。換句話說,您試圖更新每個屬性在該user記錄中,包括幾個只讀的記錄。

這是包裝REST API的SDK可能導致一些令人困惑的錯誤的情況之一。作爲REST API,它是無狀態的,因此在整個user屬性集中傳遞所有這些值都告訴API你想要的PATCH

您還將不同的user對象傳遞到對象(即對象)中。你與這個其他用戶的屬性值)替換所有的屬性值:

await graphClient.Me.Request().UpdateAsync(user);

相反,試試這個:

GraphServiceClient graphClient = SDKHelper.GetAuthenticatedClient(); 

// hard coding user id for now 
var userId = "9a5b83cd-85ff-4ad1-ab2f-b443941a518e"; 

await graphClient.Users[userId].Request().UpdateAsync(new User 
{ 
    City = "New York" 
}); 
相關問題