我使用了以下代码来获取MS Graph访问令牌:
# Resource Owner Password Credentials (ROPC)
def ropc_flow_session(AUTHORITY, RESOURCE, username, password, CLIENT_ID):
context = adal.AuthenticationContext(AUTHORITY)
token_response = context.acquire_token_with_username_password(RESOURCE, username, password, CLIENT_ID)
session = requests.Session()
session.headers.update({'Authorization': f'Bearer {token_response["accessToken"]}'})
return sessionRESOURCE和AUTHORITY值是:
RESOURCE = 'https://graph.microsoft.com'
AUTHORITY = F"https://login.microsoftonline.com/{tenant}"当我调用ropc_flow_session函数时,它返回包含以下标题的会话:
{'User-Agent': 'python-requests/2.22.0', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Bearer {ACCESS_TOKEN_VALUE}'}所以我的理解是,我可以访问注册的应用程序。
当我试图用me调用https://graph.microsoft.com/v1.0/me时,错误消息是:
{'error': {'code': 'Authorization_RequestDenied',
'message': 'Insufficient privileges to complete the operation.',我试图通过https://graph.microsoft.com/v1.0/sites/{TENANT}:/sites/{SITE_NAME}:/drives访问用户是所有者的共享库,并引发:
{'error': {'code': 'accessDenied',
'message': 'Access denied. You do not have permission to perform this action or access this resource.',这是已注册的API权限列表:

根据错误消息,我似乎已经连接为一个应用程序,但我使用了ROPC,并传递了特定用户的用户名和密码。任何想法都是感激的
更新这是我从jwt.ms获得的解码令牌:

发布于 2021-02-17 03:52:04
我在评论中已经提到过,但为了让其他有同样问题的人明白,我在这里作了更多的说明。在我的例子中,问题是注册的Azure应用程序有两个所有者。一个是我自己的工作帐户,另一个是服务帐户。我在工作帐户中添加了委托权限,它显示在API权限列表中。但是当我检查Enterprise applications链接时,它显示所有的用户同意权限仅限于一个特定的用户。

您可以单击Enterprise applications并查看user consent选项卡来检查该选项卡。

它有两个解决办法来解决这个问题:
我希望这能帮助其他有同样问题的人--
谢谢@shiva-keshav-varma对评论的有益建议
https://stackoverflow.com/questions/66205096
复制相似问题