Microsoft Graph服务因ms帐户

时间:2018-04-13 07:23:02

标签: python microsoft-graph

在我公司,我需要在OneDrive上传Excel文件。

我们有一个365商业计划,每个员工都有一个自己的365帐户,但我想为合并文件只保留一个存储库,并避免在所有帐户中共享相同的存储帐户,所以我更愿意实施“ 无用户访问 “通过客户端凭据流。

我遇到的第一个问题是授权:当我尝试通过/adminconsent端点授权应用程序时,它失败了,因为我的客户帐户不是管理员:-(
所以我'我试图使用另一个帐户,一个简单的Microsoft帐户(为此我在应用程序门户中对应用程序进行了新的注册)但是当我尝试授权应用程序时,我收到此错误:

  

“AADSTS50020:我们无法从此API版本为Microsoft帐户发放令牌。请联系应用程序供应商,因为他们需要使用该协议的2.0版本来支持此功能。”

怎么了?

作为替代方案,我已经考虑继续使用365个企业员工帐户,创建一个带有技术帐户的文件夹并共享它,但是当使用Graph Explorer与员工帐户并提出请求时

/me/drive/sharedWithMe

我只收到共享文件夹但没有内容

这里的代码(我正在使用requests_oauthlib Python模块):

一开始,我初始化类对象

client = BackendApplicationClient(client_id=config.CLIENT_ID)

self.oauth = OAuth2Session(
    client.client_id,
    scope=config.SCOPES,
    redirect_uri='https://me.local/allowed')

然后我请求authorization_url

auth_base = 'https://login.microsoftonline.com/common/adminconsent' 
self.authorization_url, state = self.oauth.authorization_url(
    auth_base,
    state="12345")
return self.authorization_url

以及令牌

的请求
return self.oauth.fetch_token(
    token_url=https://login.microsoftonline.com/common/oauth2/v2.0/token',
    client_id=config.CLIENT_ID,
    scope="https://graph.microsoft.com/.default",
    client_secret=config.CLIENT_SECRET,
    authorization_response='https://me.local/authorized'
)

1 个答案:

答案 0 :(得分:1)

您需要成为租户管理员才能同意仅限应用程序访问(您只使用客户端ID和密码)。但是,您可以使用其他流程,例如Resource Owner Credentials GrantOn-Behalf-Of Grant,这要求您拥有具有相关权限的用户的凭据。

您还可以在我的帖子中了解这些流程: Getting Access Token for Microsoft Graph Using OAuth REST API

关于"版本2.0"的消息 - 它可能是由Microsoft OAuth API的版本1和版本2之间的混淆引起的。版本1仅适用于组织用户(位于azure活动目录中的用户),版本2也支持Microsoft帐户。您可以在here中详细了解两个版本之间的差异。确保在整个过程中使用其中一个版本(创建应用程序,分配和同意权限以及请求访问令牌)。两个版本之间的混合可能不起作用。