Как использовать поток кода Microsoft Graph OAuth для создания токена, который может читать почту? - PullRequest
0 голосов
/ 28 мая 2020

Шаги по воссозданию требуют:

Шаг 1. Замените «MY_CLIENT_ID» на идентификатор клиента Azure для авторизованного приложения.

https://login.microsoftonline.com/common/oauth2/authorize?client_id=MY_CLIENT_ID&response_type=code&redirect_uri=http%3A%2F%2Flocalhost%3A12345&response_mode=query&resource=https%3A%2F%2Fgraph.microsoft.com%2F&state=12345&prompt=admin_consent&scope=https%3A%2F%2Fgraph.microsoft.com%2Fmail.read

Шаг 2: введите URL-адрес в адресной строке веб-браузера.

Шаг 3: перейдите к разрешите приложению читать электронную почту, используя существующую учетную запись Azure. (URL-адрес браузера изменится на адрес с кодом OAuth.)

Шаг 4: Скопируйте код OAuth.

Шаг 5: В приведенной ниже команде CURL:

  • Замените «MY_CLIENT_ID» на Azure идентификатор клиента для авторизованного приложения.
  • Замените «MY_CLIENT_SECRET» на секрет клиента для авторизованного приложения.
  • Замените «MY_OAUTH_CODE» на OAuth код.

curl -X POST -H "content-type: application/x-www-form-urlencoded" -d "grant_type=authorization_code&code=MY_OAUTH_CODE&redirect_uri=http%3A%2F%2Flocalhost%3A12345&client_id=MY_CLIENT_ID&scope=https%3A%2F%2Fgraph.microsoft.com%2Fmail.read&client_secret=MY_CLIENT_SECRET" "https://login.microsoftonline.com/common/oauth2/token"

Шаг 6: Введите команду CURL в командной консоли. (Будет возвращен действительный токен запроса.)

Шаг 7. Замените «MY_REQUEST_TOKEN» в приведенной ниже команде CURL токеном запроса и выполните команду в командной консоли.

curl -H "Authorization: Bearer MY_REQUEST_TOKEN" "https://graph.microsoft.com/v1.0/me/"

Обратите внимание, что возвращается базовая c информация учетной записи - это означает, что токен ДЕЙСТВИТЕЛЬНЫЙ.

Шаг 8: Замените «MY_REQUEST_TOKEN» в приведенной ниже команде CURL на токен запроса и выполните команду в командной консоли.

curl -H "Authorization: Bearer MY_REQUEST_TOKEN" "https://graph.microsoft.com/v1.0/me/messages"

Возвращается эта ошибка:

{
  "error": {
    "code": "ResourceNotFound",
    "message": "Resource could not be discovered.",
  }
} 

Ответы [ 2 ]

0 голосов
/ 02 июня 2020

Сегодня утром я смог получить доступ к сообщениям электронной почты учетной записи MS Outlook, используя URI, рекомендованные документом потока кода Microsoft OAuth здесь:

https://docs.microsoft.com/en-us/azure/active-directory/develop/v2-oauth2-auth-code-flow

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


Шаг: Вставьте URI запроса кода в панель навигации браузера:

https://login.microsoftonline.com/common/oauth2/v2.0/authorize?client_id=MY_CLIENT_ID&response_type=code&redirect_uri=http%3A%2F%2Flocalhost%3A12345&response_mode=query&scope=openid%20offline_access%20https%3A%2F%2Fgraph.microsoft.com%2Fmail.read&state=12345

Шаг: авторизуйтесь в подсказке браузера.

Шаг: скопируйте «код» из панели навигации браузера в эту команду CURL:

curl -X POST -H "content-type: application / x- www-form-urlencoded "-d" client_id = MY_CLIENT_ID & scope = https% 3A% 2F% 2Fgraph.microsoft.com% 2Fmail.read & code = MY_CODE & redirect_uri = http% 3A% 2F% 2Flocalhost% 3A12345 & grant_type = authorization_code "" https://login.microsoftonline.com/common/oauth2/v2.0/token "


Шаг: Скопируйте токен доступа из предыдущей команды CURL в эту команду CURL:

curl -H" Authorization: Bearer MY_TOKEN "" https://graph.microsoft.com/v1.0/me/messages "

0 голосов
/ 28 мая 2020

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

Пожалуйста, go через документацию https://docs.microsoft.com/en-us/previous-versions/office/office-365-api/api/version-2.0/mail-rest-operations

Просмотрите документацию, это код класса клиента: https://github.com/microsoftgraph/msgraph-sdk-dotnet/blob/dev/src/Microsoft.Graph/Requests/Generated/GraphServiceClient.cs

Вот пример:

private static GraphServiceClient GetClient(string accessToken, IHttpProvider provider = null)
{
        var delegateAuthProvider = new DelegateAuthenticationProvider((requestMessage) =>
        {
            requestMessage.Headers.Authorization = new AuthenticationHeaderValue("bearer", accessToken);

            return Task.FromResult(0);
        });

        var graphClient = new GraphServiceClient(delegateAuthProvider, provider ?? HttpProvider);

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