我们正在开发一种守护程序服务,该服务将定期自动连接到Microsoft Graph API,以列出所有用户驱动器中包含敏感内容的所有文件 . 我们在Azure / Office365租户帐户中设置了一个自定义应用程序,该帐户启用了许多权限(所有Graph和Sharepoint权限(以及其他一些权限),以便进行测试) .
使用Graph Explorer工具和我的个人登录帐户,我可以使用 /me/drive/root/children
endpoints 和 /users('<user-id>')/drive/root/children
endpoints 列出我自己的驱动器帐户中的文件(当用户ID是我自己的时) . 当我尝试使用curl和 client_credentials
client_credentials
连接时,使用Azure中自定义应用程序的 client_id
和 client_secret
, /users('<user-id>')/drive
返回正确的驱动器ID,但 /users('<user-id>')/drive/root/children
只返回一个空的子列表 .
是否有一些我遗漏的许可,我们需要设置某个地方?
这是Graph API当前状态的限制吗?
这是 client_credentials
授权类型的限制吗?
2 回答
这是Graph API当前状态的限制 - 不存在仅限应用程序的权限范围,与客户端凭据流一起使用,这将允许应用程序访问任何用户的驱动器/文件 . Files . *范围只能用作委派权限 - 请参阅https://graph.microsoft.io/en-us/docs/authorization/permission_scopes .
今天(使用应用程序权限)可以使用新的Microsoft App Dev Portal并遵循指令here . 或者,如果您在Azure门户中创建(注册)了您的应用程序,则必须使用X509证书而不是共享密钥(客户端密钥) . 至少对我来说,最有用的资源是:
https://msdn.microsoft.com/en-us/office/office365/howto/building-service-apps-in-office-365#acquiring-an-access-token-with-the-client-credential-flow
https://blogs.msdn.microsoft.com/richard_dizeregas_blog/2015/05/03/performing-app-only-operations-on-sharepoint-online-through-azure-ad/
这里有一些python代码(第二种情况),它为用户生成一个访问的URL,因此她可以授权你的应用程序,并请求访问令牌: