我們嘗試使用圖形API設置由Azure AD管理的用戶帳戶的屬性。我們的想法是,在用戶完成註冊政策後,我們調用後端Web API(通過Azure AD)以設置用戶自己無法設置的某些屬性(例如,我們的新用戶的內部客戶ID)。雖然授予了權限,圖API不斷返回Authorization_RequestDenied
不幸的是,當試圖發送更新用戶的修補程序請求時,Graph API不斷返回異常(「權限不足以競爭此操作」)。 我試圖授予所有用戶作爲管理員的權限,因爲當帳戶更新時沒有用戶登錄。我基本上希望我的應用程序成爲能夠自動管理用戶配置文件的第三方。
我的代碼如下所示:
public class GraphAPIClient
{
private AuthenticationContext authContext;
private ClientCredential clientCredential;
private string adTenant;
public GraphAPIClient(string tenant, string clientID, string clientSecret)
{
authContext = new AuthenticationContext("https://login.microsoftonline.com/" + tenant);
clientCredential = new ClientCredential(clientID, clientSecret);
adTenant = tenant;
}
public async Task<string> UpdateUserInfo(string objectID, string jsonUpdate)
{
return await SendPatchRequest("https://stackoverflow.com/users/" + objectID, jsonUpdate);
}
private async Task<string> SendPatchRequest(string api, string jsonRequest)
{
AuthenticationResult authResult = await authContext.AcquireTokenAsync("https://graph.windows.net/", clientCredential);
HttpClient httpClient = new HttpClient();
string url = "https://graph.windows.net/" + adTenant + api + "?" + "api-version=1.6";
HttpRequestMessage request = new HttpRequestMessage(new HttpMethod("PATCH"), url);
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", authResult.AccessToken);
request.Content = new StringContent(jsonRequest, Encoding.UTF8, "application/json");
HttpResponseMessage response = await httpClient.SendAsync(request);
if(!response.IsSuccessStatusCode)
{
string error = await response.Content.ReadAsStringAsync();
object formattedError = JsonConvert.DeserializeObject(error);
throw new Exception("Graph API request failed:\n" + JsonConvert.SerializeObject(formattedError, Formatting.Indented));
}
return await response.Content.ReadAsStringAsync();
}
}
我使用的註冊應用程序的應用程序ID,該目錄的租客,而我在Azure中已經生成的客戶端祕密的關鍵。我成功收到一個令牌。
我已經試過:
- 我已(或我想我有)編輯用戶所需的權限。我使用管理員帳戶點擊了「授予權限」,並在Azure面板中查看時顯示了權限: Image
- 我已經設置了「讀寫所有用戶的完整配置文件」和「讀寫目錄數據」。這些是這種任務的正確權限嗎?
- 我也嘗試過使用新的應用程序註冊控制檯,但在嘗試獲取令牌時,出現「調用應用程序的標識無法建立」異常。在此控制檯中創建的應用程序在正常的Azure AD面板中不可見。
任何人都可以幫助我嗎?我已經徹底搜索了,但有關此問題的大多數問題都比較老,建議使用舊的Azure面板。我已經嘗試過了,但它仍然不起作用,我認爲新的Azure面板最近才收到AD編輯功能,並且在問這些問題時沒有。
非常感謝 - 如果您需要更多信息,我很樂意提供。
你是否也經歷了管理員同意工作流程? –
我不認爲我有 - 有沒有辦法給管理員同意一次或整個應用程序一次或自動在應用程序內?我基本上希望開發一個後臺應用程序,將用戶賬戶中的信息添加到用戶自己無法設置的地方(因爲這是他不知道的內部信息)。我知道有同意工作流要求用戶同意,但這似乎並不是我在這裏尋找的,因爲它不是嘗試訪問現有用戶帳戶的第三方應用程序(如使用Office),但我們的自己的directoy ... – Philippe