Мне нужно подключиться к OData Sharepoint для выполнения некоторых операций CRUD (из SAP C4C).
Конечной точкой API является https://{tenant}.sharepoint.com/sites/{Site}/_api/ProjectServer/Projects
Мне удалось создать токен, выполняющий JWT с grant_type = client_credentials и сертификатом (см. https://docs.microsoft.com/en-us/azure/active-directory/develop/v2-oauth2-client-creds-grant-flow), но я не могу получить доступ к данным на ProjectServer / Projects. Ошибка заключается в следующем:
{
"error": {
"code": "-1, System.Web.Services.Protocols.SoapException",
"message": {
"lang": "en-US",
"value": "ProjectServerError(s) LastError=GeneralNotLicensed Instructions: Pass this into PSClientError constructor to access all error information"
}
}
}
Я думаю, что мне нужно пройти аутентификацию в Azure AD с пользователем, но я не могу найти хороший способ сделать это без взаимодействия с пользователем.
Я попробовал поток «Предоставление пароля» (grant_type = пароль, используя пользователя службы), но, похоже, он не работает (конечная точка токена выдает ошибку: «AADSTS70002: Ошибка при проверке учетных данных. AADSTS50126: Неверное имя пользователя или пароль») ,
У меня нет доступа к какому-либо лазурному соединителю на платформе, которую я использую, поэтому я должен выполнять все операции вручную ...
У кого-нибудь есть идеи?
Спасибо.
Edit:
Я прилагаю вызов для предоставления пароля, если это может быть полезно:
URL: https://login.microsoftonline.com/{tenant_GUID}/oauth2/token
Content-Type: application/x-www-form-urlencoded
grant_type=password
scope=openid {clientid} offline_access
resource=https://{tenant}.sharepoint.com
client_id={clientId}
username={user}@hosttenant.com
password=password
Ответ:
{
"error": "invalid_grant",
"error_description": "AADSTS70002: Error validating credentials. AADSTS50126: Invalid username or password\r\nTrace ID: XXXXXXXXXX\r\nCorrelation ID: XXXXXXXX\r\nTimestamp: 2018-08-27 15:36:50Z",
"error_codes": [
70002,
50126
],
"timestamp": "2018-08-27 15:36:50Z",
"trace_id": "XXXXXXXXXXXXXX",
"correlation_id": "XXXXXXXXXXXXXX"
}