gpt4 book ai didi

python - 如何通过OAuth2获取授权 token 并通过http请求读取Outlook邮件?

转载 作者:行者123 更新时间:2023-12-05 08:07:40 28 4
gpt4 key购买 nike

我一直在 Outlook 中检索我的电子邮件,仅使用 python 请求获取端点 https://outlook.office365.com/api/v1.0/me/messages

示例代码:

import requests

requests.get('https://outlook.office365.com/api/v1.0/me/messages', auth=(email, pwd))

我会取回一个 json 对象,对其进行解析,然后获取我的电子邮件的内容。但现在微软已经弃用了它,我一直在尝试迁移到使用 Microsoft Graph。我的问题是,如何在不必使用 http 请求启动浏览器的情况下获取 OAuth2 token ?

到目前为止,我一直在阅读 docs并在 Application Registration Portal 中注册了我的“应用程序”(只是一个普通的 python 脚本) .我遇到的每个例子,我总是必须去访问一个授权 url,在那里我必须通过如下所示的前端 UI 手动登录: outlook login我希望能够通过 http 请求/没有前端 UI 来执行此操作,但我似乎无法找到有关如何执行此操作的任何答案。

这是我目前的代码:

outlook_test.py

import requests

authorize_url = 'https://login.microsoftonline.com/common/oauth2/v2.0/authorize'
token_url = 'https://login.microsoftonline.com/common/oauth2/v2.0/token'

payload = {
'client_id': app_client_id, # Variable exists but not exposed in this question
'response_type': 'code',
'redirect_uri': 'https://login.microsoftonline.com/common/oauth2/nativeclient',
'response_mode': 'form_post',
'scope': 'mail.read',
'state': '12345'
}

r = requests.get(authorize_url, params=payload)
print(r.status_code)
print(r.text)

这是我得到的结果:

200
<!DOCTYPE html>
<html dir="ltr" class="" lang="en">
<head>
<title>Sign in to your account</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=2.0, user-scal able=yes">
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Expires" content="-1">
<meta name="PageID" content="ConvergedSignIn" />
<meta name="SiteID" content="" />
<meta name="ReqLC" content="1033" />
<meta name="LocLC" content="en-US" />

<noscript>
<meta http-equiv="Refresh" content="0; URL=https://login.microsoftonline.com/jsdisabled" />
</noscript>


<link rel="shortcut icon" href="https://secure.aadcdn.microsoftonline-p.com/ests/2.1.8502.8/co ntent/images/favicon_a_eupayfgghqiai7k9sol6lg2.ico" />

<meta name="robots" content="none" />
...

这是我在注册我的应用程序时在平台设置中设置的内容,如果有帮助的话: app platform settings screenshot

有什么方法可以通过编程方式获取授权码吗?我也尝试传递 auth 参数,但这没有用。

新发现

我最近发现 python 请求处理 OAuth2 但现在我在尝试遵循 their examples 时遇到了不同的错误.这是我得到的错误:

  File "outlook_test.py", line 31, in <module>
token = oauth.fetch_token(token_url=token_url, auth=auth)
File "C:\Users\ryee\Documents\gitLabQA\QA_BDD\outlook_env\lib\site-packages\requests_oauthlib\oauth2_session.py", line 307, in fetch_token
self._client.parse_request_body_response(r.text, scope=self.scope)
File "C:\Users\ryee\Documents\gitLabQA\QA_BDD\outlook_env\lib\site-packages\oauthlib\oauth2\rfc6749\clients\base.py", line 415, in parse_request_body_response
self.token = parse_token_response(body, scope=scope)
File "C:\Users\ryee\Documents\gitLabQA\QA_BDD\outlook_env\lib\site-packages\oauthlib\oauth2\rfc6749\parameters.py", line 425, in parse_token_response
validate_token_parameters(params)
File "C:\Users\ryee\Documents\gitLabQA\QA_BDD\outlook_env\lib\site-packages\oauthlib\oauth2\rfc6749\parameters.py", line 432, in validate_token_parameters
raise_from_error(params.get('error'), params)
File "C:\Users\ryee\Documents\gitLabQA\QA_BDD\outlook_env\lib\site-packages\oauthlib\oauth2\rfc6749\errors.py", line 405, in raise_from_error
raise cls(**kwargs)
oauthlib.oauth2.rfc6749.errors.InvalidClientIdError: (invalid_request) AADSTS90014: The required field 'scope' is missing.
Trace ID: 2359d8a6-0140-43c1-8ff5-8103045d2f00
Correlation ID: dff39a1f-ffe1-493e-aea3-1536974b777d

我尝试将 '[Mail.Read]' 作为范围,但我收到“无效范围参数”。

我的新 python 脚本:

outlook_test.py

from oauthlib.oauth2 import BackendApplicationClient
from requests.auth import HTTPBasicAuth
from requests_oauthlib import OAuth2Session
auth = HTTPBasicAuth(client_app_id, app_secret)
client = BackendApplicationClient(client_id=client_app_id)
oauth = OAuth2Session(client=client)
token = oauth.fetch_token(token_url=token_url, auth=auth)

最佳答案

您使用的范围,Mail.Read 需要用户同意。您想要的是需要管理员同意的应用程序权限 Mail.Read(此链接显示如何获得 Admin Consent )。您正在尝试访问用户的消息,因此用户需要同意该操作。根据文档:- enter image description here

enter image description here

关于python - 如何通过OAuth2获取授权 token 并通过http请求读取Outlook邮件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54246954/

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