Microsoft Graph API, опция предоставления пароля - PullRequest
1 голос
/ 04 июня 2019

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

Я могу подключиться к конечной точке и получить токен доступа и обновить токен:

GET https://login.microsoftonline.com/348a...6e4/oauth2/token?grant_type=password&\
client_id=6d5f...64f&client_secret=g...f2&username=user@Domain.com&\
password=P@ssW0RD&resource=https://graph.microsoft.com/&\
scope=user.read%20calendars.read%20MailboxSettings.Read%20Mail.read%20Mail.Send

//RESPONSE
{
    "token_type": "Bearer",
    "scope": "User.Read",
    "expires_in": "3600",
    "ext_expires_in": "3600",
    "expires_on": "1559602338",
    "not_before": "1559598438",
    "resource": "https://graph.microsoft.com/",
    "access_token": "eyJ0eXAiOiJKV...KJmNhyz5bvhzCWiFA",
    "refresh_token": "AQABAAA...VkgAA",
    "id_token": "eyJ0...xLjAifQ."
}

Но когда я пытался получить электронную почту пользователя, я получаю сообщение об ошибке:

GET https://graph.microsoft.com/v1.0/me/messages?\
$select=sender,subject,ReceivedDateTime&\
$filter=ReceivedDateTime%20ge%202019-05-01&$top=20

RESPONSE

{
    "error": {
        "code": "ErrorAccessDenied",
        "message": "Access is denied. Check credentials and try again.",
        "innerError": {
            "request-id": "e35f...94",
            "date": "2019-06-03T21:39:40"
        }
    }
}

Этот метод аутентификации все еще действителен для Microsoft Graph API? Если нет, есть ли другой способ получить авторизацию пользователя, используя только логин и пароль, без какого-либо взаимодействия с пользователем, просто получив свой логин и пароль?

1 Ответ

1 голос
/ 05 июня 2019

Вы не можете динамически указать scope с конечной точкой v1. Эта модель поддерживается только с более новой конечной точкой v2 (см. Области, а не ресурсы в документации).

Чтобы получить доступ к почтовому ящику пользователя, вам необходимо добавить Mail.Read к регистрации вашего приложения на портале Azure.

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

Я также был бы упущен, если бы не указал, что использование предоставления пароля - это почти всегда плохая идея. Это принципиально менее безопасно, чем любой другой грант OAuth.

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