我想访问用户的一个驱动器来上传文档或使用Graph API检索文档。 我在网上看到过多个例子,需要使用标准登录页面供用户登录。您需要从登录页面获取授权代码,然后使用它来获取令牌,最终可以用来访问驱动器等资源。
我正在寻找一种方法,无需通过登录页面即可完成此操作。我可以拥有自己的登录页面,我可以请求用户登录。
简而言之,我想使用像Postman这样的REST客户端访问Graph API的驱动资源(从授权到访问资源)。这可能吗?
答案 0 :(得分:10)
是的,如果您拥有正确的信息,则可能 - 您需要做的就是获得委派的访问令牌。
说明:
在处理资源访问时,Microsoft Graph有两级访问令牌要求:
通常,委派的访问令牌是需要用户互动的两个主要OAuth流程的结果(授权代码授予和隐式授权),但您也可以从两个其他流程:资源所有者凭据授予和代表授权,这些都是Microsoft支持的。
有关如何设置所需的一切以便使用这些流程(包括Postman示例)的完整指南,您可以查看我的文章:
Getting Access Token for Microsoft Graph Using OAuth REST API
答案 1 :(得分:3)
是的,这是可能的。实质上,您授予访问应用程序访问Graph API而不是用户的权限。
此类访问的文档位于:
https://developer.microsoft.com/en-us/graph/docs/concepts/auth_v2_service
您仍需要请求持有人令牌与您的所有REST请求一起发送,但持票人令牌将用于应用程序本身,而不是用户。
我使用Graph SDK for .NET为我的一个应用程序设置了这个,所以如果您需要Graph SDK for .NET的特定示例,请告诉我。
答案 2 :(得分:3)
虽然这是可能的,但强烈建议不要为个人用户访问执行此操作。 Microsoft Graph仅支持OAUTH 2.0作为其authZ协议,我们建议您使用OAUTH中的流,其中可信授权机构是直接处理登录凭据的流。允许应用程序代码提供登录凭据的表单UI将打开攻击媒介,您的应用程序可以直接访问用户的O365密码,这不是一种安全的方法。
答案 3 :(得分:1)
我发现文档没有帮助,特别是在尝试在应用程序上下文中访问Graph API时。但是,我设法在应用程序的上下文中获取访问令牌:
@Test
public void pickContactButton_click_SelectsPhoneNumber() {
// **Stub** all Intents to ContactsActivity to return VALID_PHONE_NUMBER. Note that the Activity
// is never launched and result is stubbed.
intending(hasComponent(hasShortClassName(".ContactsActivity")))
.respondWith(new ActivityResult(Activity.RESULT_OK,
ContactsActivity.createResultData(VALID_PHONE_NUMBER)));
答案 4 :(得分:0)
是的,可以在没有用户登录的情况下借助共享 url 访问 onedrive 共享文件夹。
首先你需要获得一个访问令牌,要访问你需要访问令牌的任何微软图形 API。按照链接获取无需用户登录的访问令牌 access token
编码共享网址。
stringsharingUrl = "https://onedrive.live.com/redir?resid=1231244193912!12&authKey=1201919!12921!1"; string base64Value = System.Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(sharingUrl)); string encodingUrl = "u!" + base64Value.TrimEnd('=').Replace('/','_').Replace('+','-');
-适用于 OneDrive 个人帐户 https://api.onedrive.com/v1.0/shares/{shareIdOrUrl}/driveItem?$expand=children
OneDrive for Business 和 SharePoint https://graph.microsoft.com/v1.0/shares/{shareIdOrUrl}/driveItem?$expand=children