Я пытаюсь добавлять и удалять пользователей из роли каталога (Guest Inviter) на основе идентификатора пользователя.Мой идентификатор клиента имеет Directory.AccessAsUserAll для приложения Microsoft Graph.Я использую идентификатор для роли каталога и идентификатор для пользователя.Используя клиентский вызов HTTP (глагол DELETE), я использую формат, предложенный Microsoft, и получаю «Недостаточно прав для завершения операции».ошибка.Я могу успешно выполнять другие функции
Мне кажется, что я что-то упустил.Я бы подумал, что вы по-прежнему входите в систему с помощью Client ID и Client Secret, а затем делаете что-то с ID и паролем типа администратора, а не просто создаете новый токен на основе этих учетных данных (потому что тогда зачем вам их связывать), аналогично коду олицетворения, но яне знаю, как и не могу найти пример того, как.
Использование HTTPClient Verb DELETE
по этому шаблону DELETE / directoryRoles / {id} / members / {id} / $ ref
https://docs.microsoft.com/en-us/graph/api/directoryrole-delete-member?view=graph-rest-1.0&tabs=cs
Используя C #, создающий токен носителя (с идентификатором клиента и секретом клиента), затем использующий HTTPCLient, я вызываю DeleteAsync, используя строку URL-адреса на основе рекомендуемого шаблона.
Я вижу ссылки на необходимость передачи учетных данных пользователя в роли администратора.
Я думаю, что проблема заключается в отсутствии чего-то важного.Это вызывается, как только токен носителя получен с использованием идентификатора клиента и секрета клиента для нашего арендатора.
string delURL = $"{settings.RestUrl.value}{settings.RestVersion.value}/directoryRoles/{settings.GuestInviterRoleObjectID.value}/members/{user.id}/$ref";
HttpResponseMessage payload = await client.DeleteAsync(delURL);
Task<string> json = payload.Content.ReadAsStringAsync();
JObject o = new JObject();
if (json.Result.Length > 0)
{
o = JObject.Parse(json.Result);
}
Я хотел бы удалить пользователя из роли каталога Guest Inviter.Однако я получаю
error: code:"authorization_requestDenied",
messsage: "Insufficient privileges to complete the operation" ....
Обновление: я следовал этому примеру https://dzone.com/articles/getting-access-token-for-microsoft-graph-using-oau-2
Я создал класс, содержащий свойства, поэтому после получения моего исходного токена с использованием идентификатора клиента и секрета клиента затем выполняется подачав том, что мне сказали, были глобальные полномочия администратора, и теперь я получаю 401 несанкционированную ошибку.
string tURL = $"https://login.microsoftonline.com/{settings.TenantID.value}/oauth2/token";
using (System.Net.WebClient c = new System.Net.WebClient())
{
c.Headers["Authorization"] = $"Bearer {token}";
c.Headers["Content-Type"] = "application/x-www-form-urlencoded";
System.Collections.Specialized.NameValueCollection data = new System.Collections.Specialized.NameValueCollection();
body.GetType().GetProperties().ToList().ForEach(delegate (System.Reflection.PropertyInfo item)
{
data.Add(item.Name, item.GetValue(body) == null ? string.Empty : item.GetValue(body).ToString());
});
var res = await Task.Run(() => c.UploadValues(tURL, data));
Task.WaitAll();
if(res != null)
{
string response = System.Text.Encoding.UTF8.GetString(res);
}
}
Data object
public class JSONBody
{
public string grant_type { get; set; }
public string client_id { get; set; }
public string client_secret { get; set; }
public string resource { get; set; }
public string username { get; set; }
public string password { get; set; }
public JSONBody()
{
this.grant_type = "password";
this.resource = "https://graph.microsoft.com";
}
}
Я не могу доказать или опровергнуть ошибку 401, потому что я не могу доказать, что мой код работает (или нет).