0

我正在尝试使用 Graph API 更改 Azure AD 中新创建用户的密码。我可以通过使用标题中用户的访问令牌调用图形 api 来为具有永久密码(使用 Azure UI 更改过一次密码)的用户完成此操作,如下所示:

https://graph.windows.net/<tenant_name>/me/changePassword?api-version=1.6 

Request Body : {"currentPassword": "Password1!","newPassword": "Password2!"}

但是,对于具有 Azure 提供的临时密码的新创建用户,我无法实现相同的 API 调用。这是因为我无法使用返回错误“AADSTS50055:强制更改密码”的 ADAL4J API 获取此用户的访问令牌。那么如果我无法为新用户获取令牌,我该如何更改密码?

4

1 回答 1

0

我假设您是使用资源所有者密码凭证流获取访问令牌的。

当我们使用 Azure AD Graph REST 创建用户时,我们可以在用户首次登录时禁用更改密码。这是一个示例供您参考:

POST:https://graph.windows.net/xxxx.onmicrosoft.com/users?api-version=1.6
authorization: bearer {access_token}
content-type: application/json


{
  "accountEnabled": true,
  "displayName": "User7",
  "mailNickname": "User7",
  "passwordProfile": {
    "password": "Test1234",
    "forceChangePasswordNextLogin": false
  },
  "userPrincipalName": "User7@xxxx.onmicrosoft.com"
}

然后我们可以使用资源所有者密码凭证流来获取该用户的访问令牌,如下所示(如果直接发送,请确保参数是 URL 编码的):

POST:https://login.microsoftonline.com/xxxx.onmicrosoft.com/oauth2/token
resource=https%3A%2F%2Fgraph.windows.net&client_id={clientId}&grant_type=password&username={userName}&password=Test1234&client_secret={secret}

然后我们可以使用上面的访问令牌更新用户的密码。而这个 Azure AD Graph REST 需要授予权限Directory.AccessAsUser.All

更新

当您设置forceChangePasswordNextLogintrue. 这是一个供您参考的图: 在此处输入图像描述

更新2

在这种情况下,不需要重定向自己,Azure AD 将为我们处理所有这些。当用户第一次尝试登录您的应用程序时,在用户输入正确的用户名/密码后,它要求用户更改他们的密码。用户更改密码后,它将自动重定向到您的应用程序。

于 2017-01-24T02:39:13.010 回答