使用O365 python库的Microsoft Graph身份验证

w46czmvw  于 2023-03-24  发布在  Python
关注(0)|答案(1)|浏览(151)

我adpting一个基本的脚本,我没有发送标准化的电子邮件列表的电子邮件,使用msal.
我使用msal python lib(v 1.21.0)如下:

import msal

redirect_url = f"https://login.microsoftonline.com/{tenant_id}/oauth2/v2.0/authorize/"

tokens_dir = r"<PATH>"
token_filename = r"<TOKEN_FILENAME>"
scopes = ["Mail.Send","Mail.ReadWrite","User.Read"]

authority = f"https://login.microsoftonline.com/{tenant_id}/"
app = msal.ConfidentialClientApplication(client_id=client_id, client_credential=client_secret, authority=authority)

url = app.get_authorization_request_url(scopes=scopes, redirect_uri=redirect_url)

code = input("Token auth code:" )
app.acquire_token_by_authorization_code(code, scopes=scopes, redirect_uri=redirect_url)

为了测试,它是写在ipython笔记本上的,所以我访问了“get_authorization_request_url”方法给出的URL,该方法应该给我授权代码。
但是我得到了这个错误AADSTS900144: The request body must contain the following parameter: 'client_id'。我发现这个post在谈论这个,但是我不知道如何在主体上包含参数而不是查询。

ie3xauqp

ie3xauqp1#

我尝试在我的环境中重现相同的结果,结果如下:

我注册了一个Azure AD应用程序并添加了API permissions,如下所示:

在我的例子中,我将redirect_url设置为https://jwt.ms,如下所示:

现在我在Python notebook中运行相同的代码,修改redirect_url并打印url,得到如下代码:

import msal

tenant_id = "3f5c7a77-062d-426c-8582-xxxxxxxxxxx"
client_id = "a26d7e57-0a26-4a0c-a756-xxxxxxxxxxx"
client_secret = "xxxxxxxxxxxxxxxxxxxxxx"
redirect_url = f"https://jwt.ms"

tokens_dir = r"<PATH>"
token_filename = r"<TOKEN_FILENAME>"
scopes = ["Mail.Send","Mail.ReadWrite","User.Read"]

authority = f"https://login.microsoftonline.com/{tenant_id}/"
app = msal.ConfidentialClientApplication(client_id=client_id, client_credential=client_secret, authority=authority)

url = app.get_authorization_request_url(scopes=scopes, redirect_uri=redirect_url)

print(url)

code = input("Token auth code:" )
app.acquire_token_by_authorization_code(code, scopes=scopes, redirect_uri=redirect_url)

答复:

当我点击响应中的URL时,它打开了新的选项卡来选择帐户,如下所示:

登录后,我看到了同意界面,权限如下:

在接受上述同意后,它带我到redirect_url,地址栏中的代码如下:

当我在Token auth code:中输入这段代码时,我成功地在response中获得了令牌,如下所示:

相关问题