python - 在 Python 中将资源 ID 从 ADAL 转换为 MSAL
问题描述
我们的系统需要访问 中的资源Azure
,因此在我们当前的身份验证代码中,我们对此提供了ADAL
很好的支持。
现在MSAL
正在替换ADAL
,我们想先发制人地添加对它的支持。我们现在正在创建一个生成oauth2
access_token
usingMSAL
而不是ADAL
.
我们遵循了迁移指南,但有一个问题我们没有找到答案。
使用 时ADAL
,我们将提供一个resource_id
包含标识我们正在谈论的系统的 ID。通常这resource_id
是从 Azure 门户复制的。
在MSAL
没有 的情况下resource_id
,我们应该使用一个列表来scopes
代替。如果我们天真地使用现有的resource_id
作为这样的范围:
resource_id = "XXXXXXXX-XXXX-XXXX-XXXXXXXXXXXX"
scopes = [ resource_id ]
我们收到以下错误:
Error fetching MSAL token (invalid_scope):
AADSTS70011: The provided request must include a 'scope' input parameter.
The provided value for the input parameter 'scope' is not valid.
The scope XXXXXXXX-XXXX-XXXX-XXXXXXXXXXXX is not valid.
E Trace ID: XXXXXXXX-XXXX-XXXX-XXXXXXXXXXXX
E Correlation ID: XXXXXXXX-XXXX-XXXX-XXXXXXXXXXXX
E Timestamp: 2020-03-05 09:36:03Z
所以问题是,将 XXXXXXXX-XXXX-XXXX-XXXXXXXXXXXX 形式的资源 ID 准备为有效范围的正确方法是什么MSAL
?
编辑:这个问题的答案已经过测试,并在一个小的 Python 包中使用,以简化使用名为requests_ms_auth的请求与 Azure 的身份验证,该请求也可作为pypi 包提供。
解决方案
您可以使用/.default
范围帮助将您的应用从 v1.0 端点 (adal) 迁移到 Microsoft 标识平台端点 (msal)。例如,范围值的https://graph.microsoft.com/.default
功能与 v1.0 端点的功能相同resource=https://graph.microsoft.com
。
resource_id = "XXXXXXXX-XXXX-XXXX-XXXXXXXXXXXX"
scopes = [ f"{resource_id}/.default" ]
参考:
推荐阅读
- arrays - Perl-Postgres 列数组和引号
- sql - 在PostgreSQL中替换字符串右侧的字符
- python-3.x - 删除由分隔符分隔的顺序重复单词
- python - Python Pyspark 脚本在整个数据集上失败,但适用于单个文件
- c# - ML.Net 足球预测返回不正确的结果
- python - 在python中使用递归函数
- c# - Expander 超出最大高度,无法添加 ScrollViewer
- netlogo - 在 Netlogo 中为补丁分配值
- java - 如何检查方法transferMoney(User fromUser,User toUser,int amount)中的货币是否不同?
- python - Python3,列表中的元组,如何获取其中的所有值