Как получить доступ к Sharepoint Online API с помощью приложения Azure AD v1 и учетных данных клиента - PullRequest
1 голос
/ 23 сентября 2019

Мне не удается позвонить через API через Sharepoint через Sharepoint Online.Я успешно сделал вызовы API для Graph API, поэтому я знаю, как, по моему мнению, это должно работать.

Я выполнил следующие инструкции по настройке:

В первой статье говорится, что он не будет принимать токены доступа, сгенерированные с использованием секрета клиента, но я сгенерировал токены с секретом и сертификатом и не обнаружил никакой разницы.

При вызове чего-либо, например:

https://<tenant>.sharepoint.com/_api/web

Я получаю сообщение об ошибке:

{"error_description":"Exception of type 'Microsoft.IdentityModel.Tokens.AudienceUriValidationFailedException' was thrown."}

Вот пример токена доступа, который я генерирую с конечной точкой токена v1 /:

{
  "aud": "https://microsoft.sharepoint-df.com/",
  "iss": "https://sts.windows.net/462c0b***********c3708/",
  "iat": 1569243291,
  "nbf": 1569243291,
  "exp": 1569247191,
  "aio": "42FgYDiXt***********==",
  "app_displayname": "T***********n",
  "appid": "00c***********2b",
  "appidacr": "2",
  "idp": "https://sts.windows.net/46***********708/",
  "oid": "2f8a5***********684",
  "roles": [
    "User.ReadWrite.All",
    "TermStore.Read.All",
    "Sites.FullControl.All"
  ],
  "sid": "5ab8d57***********0bc",
  "sub": "2f8a5***********684",
  "tid": "462c0***********708",
  "uti": "aHt8d***********9AA",
  "ver": "1.0"
}

Ответы [ 2 ]

0 голосов
/ 24 сентября 2019

Похоже, что сообщение об ошибке означает, что мой параметр ресурса в вызове конечной точки / token был задан неправильно.Я полагаю, что это опущено в документации Microsoft, поскольку документация разделена.Правильный вызов конечной точки токена для приложения V1 для вызова SharePoint Online выглядит следующим образом:

Веб-служба

POST https://login.microsoftonline.com/<TARGET-TENANT-ID OR NAME>/oauth2/token

Параметры

client_id= <Application ID from Azure Portal>
grant_type=client_credentials
resource= https://<TARGET-TENANT-NAME>.sharepoint.com
client_assertion_type= urn:ietf:params:oauth:client-assertion-type:jwt-bearer
client_assertion= <See Link Above to create assertion>

В приведенных выше ссылках не указано, какрассчитать значение x5t для сертификата JWT.Вы можете использовать это:

echo $(openssl x509 -in certificate.pem -fingerprint -noout) | sed 's/SHA1 Fingerprint=//g' | sed 's/://g' | xxd -r -ps | base64

, который я получил отсюда: Как получить значение "x5t", используя учетные данные сертификата для аутентификации приложения

Если вы попытаетесьиспользуйте секрет клиента вместо утверждения клиента, вы получите токен, но API REST SharePoint Online вернет:

Unsupported app only token.
0 голосов
/ 24 сентября 2019

Как вы видите в первой статье, токены доступа, сгенерированные с использованием секрета клиента, не поддерживаются Аутентификацией токенов только для приложения для SharePoint.

Если вы расшифруете токен доступа, вы обнаружите, что для "appidacr"Если используется идентификатор клиента и секрет клиента, значение равно «1».Если для аутентификации использовался сертификат клиента, значение равно «2».Подробнее здесь .

Сертификат клиента более безопасен, чем секрет клиента.Он обеспечивает двойную проверку и защиту.

Вы можете обратиться к этой сторонней статье , чтобы получить токен доступа только для приложений Azure AD с использованием сертификата и использовать этот токен доступа для доступа к ресурсам SharePoint.

Конечно, статья, которую вы упомянули в комментарии, также полезна.Он использует ACS для завершения аутентификации.

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