Microsoft Graph - Доступ к / me или / user / {id} / конечным точкам с использованием потока client_credentials - запрошенный пользователь недействителен - PullRequest
4 голосов
/ 21 января 2020

Мы используем поток client_credentials, чтобы получить доступ для нашего приложения к средам арендаторов. Приложение имеет правильные области действия, и мы получаем токен доступа, который работает для других конечных точек, таких как /users, но при выполнении запроса, подобного следующему, мы получаем сообщения об ошибках.

GET https://graph.microsoft.com/beta/me/findRooms
{
    "error": {
        "code": "ErrorInvalidUser",
        "message": "The requested user '{userId}@{tenantId}' is invalid.",
        "innerError": {
            "request-id": "b72d26a3-d0ad-42eb-a3d3-35951cb42b3d",
            "date": "2020-01-21T10:21:28"
        }
    }
}

Я понимаю, что нет «Я», когда мы просто приложение, но как мы получаем доступ к этим типам конечных точек в этом случае? Должен ли я иметь пользователя, чтобы действовать как, а? Мне кажется, что это побеждает цель такого демона. Не могу найти какой-либо четкой документации по этому вопросу. На этой странице в документах на используется раздел токена , они даже ссылаются на конечную точку / me , что неверно в этом случае.

Я пытался запросить конечную точку /users/{id}/findRooms со всеми видами идентификаторов, которые я могу найти в токене доступа - ни один из них не работает. Другие люди с такой же проблемой, которые еще не решили ее.

1. Область обратной связи в документах

2. Выпуск Github

С уважением, Кристофер

1 Ответ

2 голосов
/ 21 января 2020

Использование /users/{user-id} - это единственный шаблон, который будет работать с учетными данными клиента. В вашем случае это должно работать, поэтому, возможно, это проблема с id, который вы используете.

Чтобы убедиться, что я не даю вам неверную информацию, я просто протестировал это с помощью токена только для приложения из потока учетных данных клиента. Разбирая этот токен на https://jwt.ms, я вижу утверждение roles примерно так:

"roles": [
    "User.Read.All"
]

Если сначала сделал GET /users?$select=displayname,id, и этот пользователь был включен в ответ :

{
    "displayName": "Adele Vance",
    "id": "3103c7b9-cfe6-4cd3-a696-f88909b9a609"
}

Это id для использования в вашем findRooms вызове. Я набрал GET /users/3103c7b9-cfe6-4cd3-a696-f88909b9a609/findrooms и получил следующий ответ:

{
    "@odata.context": "https://graph.microsoft.com/beta/$metadata#Collection(microsoft.graph.emailAddress)",
    "value": [
        {
            "name": "Conf Room Adams",
            "address": "Adams@M365x330971.onmicrosoft.com"
        },
        {
            "name": "Conf Room Baker",
            "address": "Baker@M365x330971.onmicrosoft.com"
        },
        {
            "name": "Conf Room Crystal",
            "address": "Crystal@M365x330971.onmicrosoft.com"
        },
        {
            "name": "Conf Room Hood",
            "address": "Hood@M365x330971.onmicrosoft.com"
        },
        {
            "name": "Conf Room Rainier",
            "address": "Rainier@M365x330971.onmicrosoft.com"
        },
        {
            "name": "Conf Room Stevens",
            "address": "Stevens@M365x330971.onmicrosoft.com"
        }
    ]
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...