gpt4 book ai didi

python - Outlook 365 api 中的身份验证

转载 作者:行者123 更新时间:2023-12-01 00:24:10 25 4
gpt4 key购买 nike

我的用例是:制作一个每小时运行一次的脚本,以提取有关用户日历的信息。

我的脚本在 Python 中运行,我获得了一个 token ,但我无法获得用户的事件。我已在 Microsoft Application Registration Portal 中注册了我的应用程序并授予 Calendar.read 应用程序权限。管理员通过访问 /adminconsent 表示同意端点。

这是我获取 token 的代码(文档 here):

url = 'https://login.microsoftonline.com/common/oauth2/v2.0/token'
data = {
'grant_type': 'client_credentials',
'client_id': app_id,
'scope': 'https://graph.microsoft.com/.default', <--- Really not sure about this here
'client_secret': client_secret,
}
r = requests.post(url, data=data)
token = r.json().get('access_token')

我应该使用什么范围?文档只提到了上面的一个。

并阅读用户的日历:
url = 'https://outlook.office.com/api/v2.0/users/{}/events'.format(user_email)
headers = {
'Authorization': 'Bearer {}'.format(token)
}
r = requests.get(url, headers=headers)

我不确定 users/{user_email}/部分。

我获得了访问 token ,但在尝试读取用户的日历时出现以下错误:

Response [401]

The access token is acquired using an authentication method that is too weak to allow access for this application. Presented auth strength was 1, required is 2.

最佳答案

我终于找到了。我非常接近。

我不得不使用 Microsoft Graph API 端点而不是 Outlook Unified API 端点。

最终代码如下所示:

import requests

# Get a token
url = 'https://login.microsoftonline.com/common/oauth2/v2.0/token'
data = {
'grant_type': 'client_credentials',
'client_id': app_id,
'scope': 'https://graph.microsoft.com/.default'
'client_secret': client_secret,
}
r = requests.post(url, data=data)
token = r.json().get('access_token')

# ...

# Use the token using microsoft graph endpoints
url = 'https://graph.microsoft.com/v1.0/users/{}/events'.format(user_email) # can also use the user_id (e.g. 12345-abcde-...)
headers = {
'Authorization': 'Bearer {}'.format(token)
}
r = requests.get(url, headers=headers)

微软的文档确实需要澄清。它有太多不同的 API 来做非常相似的事情。

关于python - Outlook 365 api 中的身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46259183/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com