Azure AD 使用图形 api 更改临时密码
Azure AD change temporary password using graph api
我正在尝试使用 Graph API 更改 Azure AD 中新创建的用户的密码。我可以通过使用 headers 中用户的访问令牌调用图 api 为具有永久密码(密码已使用 Azure UI 更改一次)的用户完成此操作如下图:
https://graph.windows.net/<tenant_name>/me/changePassword?api-version=1.6
Request Body : {"currentPassword": "Password1!","newPassword": "Password2!"}
但是,对于具有 Azure-provided 临时密码的新创建用户,我无法实现相同的 API 调用。这是因为我无法使用 ADAL4J API 为该用户获取访问令牌 returns 错误 "AADSTS50055: Force Change Password." 所以如果我无法为新用户获取令牌我该如何更改密码?
我假设您是使用资源所有者密码凭证流 获取访问令牌的。
当我们使用 Azure AD Graph REST 创建用户时,我们可以禁止用户 sign-in 首次更改密码。这里有一个例子供您参考:
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
.
更新
将forceChangePasswordNextLogin
设置为true
,用户首次登录Azure AD(无论是您开发的还是使用Azure门户的应用程序)时都必须更改密码。这是一个供您参考的数字:
更新2
并且在这种情况下,您无需重定向,Azure AD 会为我们处理所有这些。当用户第一次尝试 login-in 您的应用程序时,在用户输入正确的 username/password 后,它会要求用户更改密码。用户更改密码后,它会自动重定向到您的应用程序。
我正在尝试使用 Graph API 更改 Azure AD 中新创建的用户的密码。我可以通过使用 headers 中用户的访问令牌调用图 api 为具有永久密码(密码已使用 Azure UI 更改一次)的用户完成此操作如下图:
https://graph.windows.net/<tenant_name>/me/changePassword?api-version=1.6
Request Body : {"currentPassword": "Password1!","newPassword": "Password2!"}
但是,对于具有 Azure-provided 临时密码的新创建用户,我无法实现相同的 API 调用。这是因为我无法使用 ADAL4J API 为该用户获取访问令牌 returns 错误 "AADSTS50055: Force Change Password." 所以如果我无法为新用户获取令牌我该如何更改密码?
我假设您是使用资源所有者密码凭证流 获取访问令牌的。
当我们使用 Azure AD Graph REST 创建用户时,我们可以禁止用户 sign-in 首次更改密码。这里有一个例子供您参考:
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
.
更新
将forceChangePasswordNextLogin
设置为true
,用户首次登录Azure AD(无论是您开发的还是使用Azure门户的应用程序)时都必须更改密码。这是一个供您参考的数字:
更新2
并且在这种情况下,您无需重定向,Azure AD 会为我们处理所有这些。当用户第一次尝试 login-in 您的应用程序时,在用户输入正确的 username/password 后,它会要求用户更改密码。用户更改密码后,它会自动重定向到您的应用程序。