Услуга недоступна, получена при вызове MS Graph API - PullRequest
0 голосов
/ 06 марта 2020

Мы выполняем вызов API MS Graph для получения URL-адреса Sharepoint команды.

URL-адрес API: GET https://graph.microsoft.com/v1.0/groups/ {GroupID} / sites / root / weburl

Мы получаем это:

Ответ:

{
  "error": {
    "code": "serviceNotAvailable",
    "message": "The service is not available. Try the request again after a delay. There may be a Retry-After header.",
    "innerError": {
      "request-id": "9f23d067-e851-4c43-8701-abe137683b87",
      "date": "2020-03-05T13:53:43"
    }
  }
}

В чем может быть проблема?

Ответы [ 3 ]

1 голос
/ 06 марта 2020

У меня возникла похожая проблема при поиске сайтов (GET /sites?search=*) с API Graph со 2 марта. Я не смог восстановиться. Я испытал это на нескольких арендаторах O365, как бесплатных, так и лицензированных.

Документы Microsoft говорят, что этот код ошибки вызван дросселированием, вызванным MSFT, но моя частота запросов равна 50 в час.

Это, похоже, ошибка Microsoft. Для этого я опубликовал проблему переполнения стека , и @ rafa-ayadi сообщил, что MSFT исправляет эту проблему для одного из своих клиентов.

Я купил для этой цели подписку Azure Support Support. вопрос, но MSFT закрыл его и направил меня в службу поддержки Sharepoint Developer, для которой я не могу найти ссылку или цены. Так что пока мне не повезло заставить MSFT признать и исправить это для меня.

0 голосов
/ 10 марта 2020

Моя похожая проблема с доступом к любому ресурсу в API сайтов была вызвана одновременным предоставлением разрешений Groups.Create и Groups.ReadWrite.All для доступа к типу приложения.

Удаление Groups.Create разрешило все Вызовы CRUD будут успешными без ошибок serviceNotAvailable, даже вызовов командной строки, которые просто обращаются к сайтам.

Обязательно обновите права администратора и свой токен, если вы измените разрешения для теста.

Пользователь @ user13034886 упомянул разрешение cla sh в другой пост .

0 голосов
/ 07 марта 2020

/ ** Вам нужно сделать авторизацию делегированной. См. Следующий код: Прежде всего, вам нужно от портала. azure .com зарегистрировать приложение и получить: идентификатор папки это идентификатор приложения tenantID. это clientId ** /

URL urlObj = new             
URL("https://login.microsoftonline.com/"+config.tenantID+"/oauth2/v2.0/token");
HttpURLConnection httpCon = (HttpURLConnection) urlObj.openConnection();

String urlParameters = "" + // para la v2.0
   "grant_type"+"="+"password"+"&"+ /
   "scope" + "=" + "https%3A%2F%2Fgraph.microsoft.com%2F.default" +"&" +
   "client_id" + "=" + config.clientId +"&" +
   "client_secret" + "=" + config.clientSecret +"&" +
   "username" + "=" + config.username +"&" +
   "password" + "=" + config.contrasena +"&";

byte[] postData = urlParameters.getBytes( StandardCharsets.UTF_8 );
int postDataLength = postData.length;

httpCon.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
httpCon.setRequestProperty("Content-Length",String.valueOf(postDataLength));
httpCon.setRequestMethod("POST");

httpCon.setDoOutput(true);
OutputStreamWriter writer = new OutputStreamWriter(httpCon.getOutputStream());
writer.write(urlParameters);
writer.flush();

int status = httpCon.getResponseCode();

BufferedReader in = new BufferedReader(new 
   InputStreamReader(httpCon.getInputStream()));
String inputLine;
StringBuffer content = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
   content.append(inputLine);
}
in.close();
String body = getBody(content.toString());

String token = null;
final ObjectNode node = new ObjectMapper().readValue(body, ObjectNode.class);
if (node.has("access_token")) {
    token = node.get("access_token").asText();
}
httpCon.disconnect();

return token;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...