非交互式身份验证因 WsTrust 服务器问题 MSIS7068 而失败

Non-interactive authentication fails with WsTrust server issue MSIS7068

设置:

这里是非交互验证码:

import msal

# create a public client app
authority_url = f"https://login.microsoftonline.com/{TENANT_ID}"
msal_app = msal.PublicClientApplication(client_id=CLIENT_ID, authority=authority_url)

# acquire token
token = msal_app.acquire_token_by_username_password(username=USERNAME, password=PASSWORD, scopes=SCOPES)

我收到以下错误:

Traceback (most recent call last):
  File "/./scripts/aad.py", line 8, in <module>
    token = msal_app.acquire_token_by_username_password(
  File "/usr/local/lib/python3.10/site-packages/msal/application.py", line 1420, in acquire_token_by_username_password
    response = _clean_up(self._acquire_token_by_username_password_federated(
  File "/usr/local/lib/python3.10/site-packages/msal/application.py", line 1447, in _acquire_token_by_username_password_federated
    wstrust_result = wst_send_request(
  File "/usr/local/lib/python3.10/site-packages/msal/wstrust_request.py", line 60, in send_request
    return parse_response(resp.text)
  File "/usr/local/lib/python3.10/site-packages/msal/wstrust_response.py", line 49, in parse_response
    raise RuntimeError("WsTrust server returned error in RSTR: %s" % (error or body))
RuntimeError: WsTrust server returned error in RSTR: {'reason': 'MSIS7068: Access denied.', 'code': 'a:FailedAuthentication'}

通过 Google 搜索我发现这可能是由 MFA 引起的,但是用户被排除在 MFA 之外。我还验证了没有条件访问策略来阻止用户访问该应用程序。 使用交互式身份验证按预期工作。关于如何使非交互式身份验证工作或这里可能存在什么问题的任何想法?

首先,不要猜测!您将需要以提升的权限登录到 Azure AD(如果不是全局管理员,至少安全 Reader)。

  1. 转到企业应用程序并通过客户端 ID 找到您的应用程序。
  2. 如果你正在申请,请转到 Sign-in tab/pane。
  3. 查看 sign-in 活动。您应该在概览选项卡中看到身份验证失败的原因。查看“条件访问”选项卡,您就会知道是否有任何策略阻止了 sign-in.

根据您在 sign-in activity 中确定的内容采取行动。

好吧,我来猜一猜!当您以 non-interactive 身份登录时,您有两种身份验证选择 - ROPC 和客户端凭据 - 两者都需要在请求中传递 client_secret,但你没有!由于您使用的是用户名和密码,这意味着 msal 正在使用 ROPC,您必须包括客户端密码。