【问题标题】:Converting Resource ID from ADAL to MSAL in Python在 Python 中将资源 ID 从 ADAL 转换为 MSAL
【发布时间】:2020-03-05 10:07:29
【问题描述】:

我们的系统需要访问Azure 中的资源,因此在我们当前的身份验证代码中,我们支持ADAL,可以很好地实现此目的。

现在MSAL 正在取代ADAL,我们希望抢先添加对它的支持。我们现在正在创建一个函数,它使用 MSAL 而不是 ADAL 生成 oauth2 access_token

我们已关注migration guide,但有一个问题我们没有找到答案。

当使用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 package

【问题讨论】:

标签: python azure token adal msal


【解决方案1】:

您可以使用/.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" ]

参考:

The /.default scope

Scopes for a Web API accepting v1.0 tokens.

【讨论】:

  • 这很好。但我的范围值不是 URL,它是 XXXXXXXXX-XXXX-XXXX-XXXXXXXXXXXX 形式的资源 ID。如何将其转换为 URL?如果我不能转换它,我怎样才能找到匹配的 URL?这是真正的问题。
  • @LennartRolland 你可以使用 scopes = [ resource_id/.default ] 参考docs.microsoft.com/en-us/azure/active-directory/develop/…
猜你喜欢
  • 2019-09-03
  • 1970-01-01
  • 1970-01-01
  • 2019-11-30
  • 2021-04-10
  • 1970-01-01
  • 1970-01-01
  • 2019-11-05
  • 1970-01-01
相关资源
最近更新 更多