Доступ к 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 без входа пользователя.
сначала вам нужно получить токен доступа, чтобы попасть в любой API-интерфейс Microsoft Graph, вам нужен токен доступа. перейдите по ссылке , чтобы получить маркер доступа без Логина пользователя маркера доступа
Кодировать общий 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('+','-');
Обнаружение конечной точки https://docs.microsoft.com/en-us/onedrive/developer/rest-api/concepts/direct-endpoint-differences?view=odsp-graph-online#discovering-an-endpoint
-для личных аккаунтов OneDrive https://api.onedrive.com/v1.0/shares/{shareIdOrUrl}/driveItem?$expand=children
OneDrive для бизнеса и SharePointhttps://graph.microsoft.com/v1.0/shares/{shareIdOrUrl}/driveItem?$expand=children