【问题标题】:Microsoft Graph API Password Reset Only Accepts Null passwordMicrosoft Graph API 密码重置仅接受空密码
【发布时间】:2018-09-10 16:46:00
【问题描述】:

我正在尝试通过 Graph API(特别是 graph.windows.net,尽管使用 graph.microsoft.com 也会出现相同的行为)重置另一个用户的密码。

我相信所有安全设置都已正确设置。应用程序注册具有 Directory.ReadWrite.All 权限,服务主体是全局管理员。没有关于权限不足的错误,但每当我尝试在密码配置文件中提供密码时,我都会收到错误。

的 PATCH 请求

https://graph.windows.net/{tenant_id}/users/{userPrincipalName}?api-version=1.6

使用以下正文给我一个 204 响应。

{ 
    "passwordProfile": {
        "password": null,
        "forceChangePasswordNextSignIn": true 
    }
}

但密码为“P@ssword1”或任何其他有效密码的相同请求会返回 400 Bad Request,并显示消息“一个或多个属性包含无效值。”

有人遇到过这种情况吗?这些是从本地 AD 同步的帐户,但已在 Azure 中启用密码重置,您可以在 AAD 中手动重置密码。非常感谢任何帮助或建议。

【问题讨论】:

    标签: azure-active-directory microsoft-graph-api


    【解决方案1】:

    事实证明,这是在他们的环境中设置 AD 同步的问题。显然,与 Azure AD 同步的联合域锁定了通过 Graph API 重置密码的能力,但错误消息并没有告诉您这是权限问题。

    这是不支持的操作下的大纲,我的问题是不了解完整的 AD 环境设置:https://docs.microsoft.com/en-us/azure/active-directory/authentication/concept-sspr-writeback

    【讨论】:

      【解决方案2】:

      根据您的描述,我假设您想通过 Graph API 更新用户密码。

      根据this document,当我们更新passwordProfile属性时,需要以下权限:Directory.AccessAsUser.All

      根据我的测试,我们可以通过以下步骤修改某人的密码:

      1. 按照本文档授予权限。

      2. 检查配置文件中的密码是否满足 passwordPolicies 属性指定的最低要求。

      3. 使用以下请求更新某人的密码。

      请求网址:

      PATCH /users/{id | userPrincipalName}

      以及请求正文:

      { "passwordProfile": { "forceChangePasswordNextSignIn": true, "password": "P@assword1" } }

      如果成功,此请求将返回 204 No Content 响应代码。

      【讨论】:

      • 感谢您的回复。我确实错过了那个注释,所以我添加了 Directory.AccessAsUser.All 权限,但得到了相同的响应。我觉得奇怪的是,只有当我将密码设为空时,我才会得到适当的 204 响应。
      • 您是否检查了配置文件中的密码是否满足passwordPoliciesproperty 指定的最低要求。如果是这样,您可以尝试在 Graph Explore 中,并检查它是否有效。
      【解决方案3】:

      您调用了错误的 URL,graph.windows.net 是旧版 Azure AD Graph API。 Microsoft Graph API 位于 graph.microsoft.com。虽然这些 API 在功能上相似,但它们调用的模式却大不相同。

      正如 kikang 提到的,要更改用户的密码,您需要请求 Directory.AccessAsUser.All 范围。这个范围有几个重要的注意事项:

      1. 这是一个委托范围,因此只能在使用授权代码或隐式 OAuth 流时请求。它不能与客户端凭据一起使用。

      2. 在用户同意 Director.AccessAsUser.All 之前,您必须首先获得用户 AAD 租户/实例的管理员的管理员同意。

      一旦您同意了适当的范围,您需要向/user 资源发出PATCH

      您的电话将类似于以下内容:

      PATCH https://graph.microsoft.com/v1.0/me
      Content-type: application/json
      
      {
        "passwordProfile": {
          "forceChangePasswordNextSignIn": true,
          "password": "A-Strong-Password"
        }
      }
      

      【讨论】:

      • 感谢您的回答。我在这两个 URL 上都试过了(旧的仍然可以正常工作,因为它们或多或少以相同的方式操作,一个只是密码重置的主体略有不同)。事实证明,在处理与 Azure AD 同步的联合本地域时,它是 Graph API 本身的一个限制。您收到的错误消息并不是很有帮助。我认为它存在是因为他们希望您使用 O365 中内置的 SSPR 功能。
      猜你喜欢
      • 2018-02-01
      • 1970-01-01
      • 2018-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多