在我公司,我需要在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'
)
答案 0 :(得分:1)
您需要成为租户管理员才能同意仅限应用程序访问(您只使用客户端ID和密码)。但是,您可以使用其他流程,例如Resource Owner Credentials Grant和On-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中详细了解两个版本之间的差异。确保在整个过程中使用其中一个版本(创建应用程序,分配和同意权限以及请求访问令牌)。两个版本之间的混合可能不起作用。