python - 您可以在实例化 MSAL ConfidentialClientApplication 后更改它的权限吗?
问题描述
我正在使用客户端凭据流开发多租户 Azure AD 应用程序,并依赖MSAL for Python来获取调用 MS Graph API 所需的令牌。该应用程序本身是一个守护程序和 Web 应用程序的混合体,这意味着任何用户都不能直接登录,但无论是在调用时还是定期地,它都需要代表他们进行 MS Graph API 调用。我已正确注册应用程序,并且管理员已授予所有租户的应用程序权限。
在请求此处和此处描述的令牌后,对于具有相应权限的主租户,我成功地为该租户中的用户调用了 Graph API。但是,当我尝试为另一个租户中的用户调用 MS Graph API 时(大概如预期的那样),它会导致错误的响应。
我确信权限已被授予,因为如果我使用不同的权限重新实例化 msal 或按照此处/token
所述手动调用端点,我会成功检索相应用户的 Graph API 数据。
我没有发布任何代码,因为这些问题与 Python 本身的设计和 MSAL 更相关。此外,为了进行完整性检查,我尝试在实例化的 msal 应用程序中直接设置权限字段,但这并没有改变。在对 MSAL 源进行更多挖掘之后,我意识到它并没有改变,因为应用程序的初始化在构造函数中创建了权限,并且使用既不使用ConfidentialClientApplication(...).aquire_token_for_client(...)
也不使用Client(...).aquireTokenForClient(...)
前者依赖于权限本身。最后,我在存储库中找不到任何问题,在文档中找不到任何问题,也找不到任何关于 SO 的问题能够回答我的问题。
因此,由于我需要与之交互的租户可能会发生变化,而且我觉得每次我需要在自己的端点中请求访问令牌时都实例化 MSAL 应用程序会产生一些开销,所以我的问题是:
- 我错过了一些明显的东西吗?
- 创建 msal 实例后是否可以更改权限?
- 如果不可能,在此用例中为每个租户处理获取访问令牌的最佳方式是什么?
提前请你!
编辑:
我设法找到了一些可能有用的东西。是Azure提供的一个示例flask app,每次调用_build_msal_app()
方法都会创建msal app。尽管如此,我的问题仍然是这是否是最佳方式,即使答案可能与 Azure 的实现一致。
解决方案
推荐阅读
- google-sheets - 如何使用谷歌财务API计算谷歌表格中每日收益的月度标准偏差
- mysql - 在 MySQL 5.7 中获取 Innodb 锁定线程 ID?
- customization - 我们可以为 Microsoft Teams 的应用程序创建自定义通知弹出窗口吗
- html - 想要在 HTML 的第五列的第一行打印值
- javascript - 如何在Javascript中过滤复杂的json文件
- jestjs - Svelte on:click 事件的单元测试
- svg - 转换 svg 父级导致模糊 - Firefox
- python - PySpark - 在结构列中填充空值
- kotlin - Kotlin 源代码中实现了哪些方法?
- django - nginx django gunicorn 404静态文件未加载