Доступ к Microsoft Graph API без использования страницы входа

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

Ищу способ сделать это, не заходя на страницу входа. У меня может быть своя собственная страница входа, где я могу попросить пользователя войти в систему.

Короче говоря, я хочу получить доступ к ресурсу накопителя Graph API с помощью REST-клиента, такого как Postman (от авторизации до доступа к ресурсу). Это возможно?

5 ответов

Решение

Нет, это невозможно для доступа отдельного пользователя. Microsoft Graph поддерживает только протокол OAUTH 2.0 в качестве своего протокола authZ, который требует, чтобы доверенным органом был тот, который обрабатывает учетные данные для входа. Разрешение коду приложения предоставлять пользовательский интерфейс форм для учетных данных входа в систему откроет вектор атаки, где у вашего приложения будет прямой доступ к паролю пользователя O365, что небезопасно.

Да, это возможно, если у вас есть правильная информация - все, что вам нужно сделать, это получить токен делегированного доступа.

Объяснение:

При работе с доступом к ресурсам Microsoft Graph предъявляет два требования к токену доступа:

  • Большинство методов поддерживают только токены Application, то есть, если OAuth-приложение получит согласие, оно сможет обращаться к ресурсу в любое время.
  • Но для некоторых методов этого недостаточно (они слишком чувствительны для автоматизированного процесса) и требуется делегированный токен, то есть токен, который содержит как действительный клиент, так и пользователя. В документации каждого метода вы можете увидеть, какой токен ему требуется.

Обычно маркеры делегированного доступа являются результатом двух основных потоков OAuth, которые требуют взаимодействия с пользователем (предоставлениекода авторизации и неявное предоставление), но вы также можете получить их из двух других потоков: предоставление полномочий владельца ресурса и предоставление от имени, которые являются оба поддерживаются Microsoft.

Для полного руководства о том, как настроить все, что вам нужно для того, чтобы использовать эти потоки (включая примеры Postman), вы можете посмотреть мою статью:

Получение токена доступа для Microsoft Graph с использованием OAuth REST API

Да, это возможно. По сути, вы предоставляете доступ приложениям доступа к Graph API вместо пользователя.

Документация для такого доступа здесь:

https://developer.microsoft.com/en-us/graph/docs/concepts/auth_v2_service

Вам все еще нужно будет запросить токен носителя для отправки со всеми вашими запросами REST, но токен носителя будет предназначен для самого приложения, а не для пользователя.

Я настроил это для одного из моих приложений, используя Graph SDK для.NET, поэтому, если вам нужны конкретные примеры для Graph SDK для.NET, дайте мне знать.

Я обнаружил, что документация бесполезна, особенно с точки зрения попыток доступа к API Graph в контексте приложения. Но мне удалось получить токен доступа в контексте приложения здесь:

private static async Task<string> AcquireToken()
{
    var tenant = "yourtenant.onmicrosoft.com";
    var resource = "https://graph.microsoft.com/";
    var instance = "https://login.microsoftonline.com/";
    var clientID = "YourappID";
    var secret = "YourAppSecret";
    var authority = $"{instance}{tenant}";
    var authContext = new AuthenticationContext(authority);
    var credentials = new ClientCredential(clientID, secret);
    var authResult = await authContext.AcquireTokenAsync(resource, credentials);
    return authResult.AccessToken;
}

Да, можно получить доступ к общей папке onedrive с помощью общего URL без входа пользователя.

  1. сначала вам нужно получить токен доступа, чтобы попасть в любой API-интерфейс Microsoft Graph, вам нужен токен доступа. перейдите по ссылке , чтобы получить маркер доступа без Логина пользователя маркера доступа

  2. Кодировать общий URL.

    string sharingUrl = "https://onedrive.live.com/redir?resid=1231244193912!12&authKey=1201919!12921!1"; строка base64Value = System.Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(sharingUrl)); строка encodedUrl = "u!" + base64Value.TrimEnd('=').Replace('/','_').Replace('+','-');

  3. Обнаружение конечной точки https://docs.microsoft.com/en-us/onedrive/developer/rest-api/concepts/direct-endpoint-differences?view=odsp-graph-online#discovering-an-endpoint

  4. -для личных аккаунтов OneDrive https://api.onedrive.com/v1.0/shares/{shareIdOrUrl}/driveItem?$expand=children

    OneDrive для бизнеса и SharePointhttps://graph.microsoft.com/v1.0/shares/{shareIdOrUrl}/driveItem?$expand=children

Другие вопросы по тегам