Наше приложение многогранно и зарегистрировано на портале Azure (https://portal.azure.com). Допустим, имя приложения — «Целевое приложение». Мы предоставили разрешение для API Graph на портале Azure и пытаемся получить документы с демонстрационного сайта. Здесь демонстрационный сайт также зарегистрирован на портале Azure, но в другом домене. После этого мы назначили разрешение Sites.Selected демонстрационному приложению, но не можем получить документы и получаем ошибку «доступ запрещен» при попытке использовать этот Graph API:
POST https://graph.microsoft.com/v1.0/sites/{sitesId}/permissions
Content-Type: application/json{
"roles": ["write"],
"grantedToIdentities": [{
"application": {
"id": //Target Application’s Client Id
"displayName": //Target Application’s Display name
}
}]
}
нам не хватает какой-либо конфигурации на уровне приложения?
Вот SS, генерирующий токен:
создание токена с помощью Postman, вот подробности: POST: login.microsoftonline.com/tenantId/oauth2/v2.0/token grant_type:client_credentials client_id: appId client_secret: секретная область: graph.microsoft.com/ .по умолчанию
Вы пытаетесь получить доступ к сайту от того же арендатора или от другого арендатора? Не могли бы вы добавить более подробную информацию об этом для ясности?
другой арендатор.
Вы генерируете токен от одного арендатора и используете его для доступа к сайту в другом арендаторе?
Нет, создайте токен, используя того же клиента, и получите доступ к этому сайту под этим клиентом.
Давайте продолжим обсуждение в чате.
Ошибка обычно возникает, если у токена нет необходимых разрешений для выполнения операции.
Первоначально я тоже получил ту же ошибку, когда попытался выполнить POST-запрос с токеном, имеющим только разрешение Sites.Selected
:
POST https://graph.microsoft.com/v1.0/sites/{sitesId}/permissions
Content-Type: application/json
{
"roles": ["write"],
"grantedToIdentities": [{
"application": {
"id": //Target Application’s Client Id
"displayName": //Target Application’s Display name
}
}]
}
Ответ:
Чтобы устранить эту ошибку, обязательно добавьте разрешение «Sites.FullControl.All» типа «Приложение» и дайте ему согласие, как показано ниже:
Теперь я снова сгенерировал токен, используя поток учетных данных клиента через Postman, следующим образом:
POST https://login.microsoftonline.com/<tenantID>/oauth2/v2.0/token
grant_type:client_credentials
client_id:<appID>
client_secret:<secret>
scope: https://graph.microsoft.com/.default
Ответ:
Чтобы убедиться в этом, вы можете декодировать этот токен в jwt.ms и проверить разрешения в утверждении roles
, как показано ниже:
Когда я использовал этот токен для запроса POST на создание разрешения, я получил такой ответ:
POST https://graph.microsoft.com/v1.0/sites/{sitesId}/permissions
Content-Type: application/json
{
"roles": ["write"],
"grantedToIdentities": [{
"application": {
"id": //Target Application’s Client Id
"displayName": //Target Application’s Display name
}
}]
}
Ответ:
Ссылка: Разрешение на создание — Microsoft Graph v1.0
Это работает для меня; просто нам нужно добавить разрешение YYY приложения Sites.Selected как на уровне SharePoint, так и на уровне Microsoft Graph.
Не могли бы вы рассказать, как вы генерируете токен на предъявителя, с каким потоком и разрешениями API?