使MSAL授权代码工作流工作时遇到问题



我正在构建一个桌面python应用程序,该应用程序通过打开浏览器窗口进行身份验证来使用MSAL授权代码工作流。在尝试获取授权令牌时,我不断收到一些帐户的无效授权错误(代码70000(,但其他帐户没有。它似乎适用于在Azure门户网站中注册应用程序的个人Microsoft帐户。它也适用于我的大学账户(学校微软账户(,但不适用于其他个人微软账户。

通过Azure门户,该应用程序已注册,所有Microsoft帐户都可以使用该应用程序。其中列出的作用域也与我在python应用程序中请求的作用域相匹配。

授权端点确实返回了一个看起来有效的授权代码,但当我尝试使用该代码来获取有效的令牌时,我会收到错误。更具体地说,与错误相关的消息显示:AADSTS70000: The request was denied because one or more scopes requested are unauthorized or expired. The user must first sign in and grant the client application access to the requested scope.rnTrace ID: 6afddbd2-308e-44df-8640-976dc1c1f601rnCorrelation ID: bdb626d0-0a3d-4333-ac8f-b5ff510ca046rnTimestamp: 2022-07-24 18:50:23Z

是什么原因导致出现此问题?

事实证明,这是我提供给授权端点的作用域的问题。应指定作用域profileopenidoffline_access,以允许Microsoft的Graph API的某些功能正常工作。在我的例子中,是offline_access作用域起了作用。还要注意,这些作用域不能添加到授权令牌请求中,至少可以通过Python MSAL库添加。仅在获取授权代码的过程中需要指定这些作用域,而不需要指定令牌。

最新更新