我正在尝试使用nodeJs后端API函数使用Graph API重置Azure B2C用户密码。
我正在使用下面的代码来获取访问令牌
const url = `https://login.microsoftonline.com/${AZURE_TANENT_ID}/oauth2/v2.0/token`;
const data = `grant_type=client_credentials&client_id=${AZURE_CLIENT_ID}&client_secret=${AZURE_CLIENT_SECERET}&scope=https://graph.microsoft.com/.default`;
字符串
一旦我得到令牌,我发送补丁请求重置密码如下:
const url = `${constants.GRAPH_URL}${AZURE_TANENT_ID}/users/${azUserId}`;
const updatedObj = {
passwordProfile: {
password: <newpassword>,
forceChangePasswordNextSignIn: false,
}
};
try {
const response = await axios.patch(url, updatedObj, {
headers: {
Authorization: `Bearer ${token}`,
'Content-Type': 'application/json',
},
});
return response.data;
型
我已将Directory.ReadWrite.All和User.ReadWrite.All应用程序权限设置为Azure中的Graph API,并将“用户管理”设置为我的B2C应用程序,其中clientId和Secrets用于获取token. Roles Image
我得到的错误:
Error creating user: {
error: {
code: 'Authorization_RequestDenied',
message: 'Insufficient privileges to complete the operation.',
innerError: {
date: '2023-12-01T06:30:15',
'request-id': 'someId',
'client-request-id': 'someId'
}
}
}
型
我尝试使用下面的代码更新DisplayName,它工作正常:
const updatedObj = {
displayName: "Name Joe"
};
型
我需要解决方案来更新passwordProfile对象,以便我可以从后端使用图形API重置密码
1条答案
按热度按时间ujv3wf0j1#
在纯应用场景下,应用必须被分配更高权限的管理员角色才能更新
passwordProfile
等敏感属性。我注册了一个Azure AD应用程序,并添加了相同的API权限,如下所示:
的数据
现在,我为应用程序分配了用户管理员角色,如下所示:
的
在我的例子中,我使用Postman使用客户端凭据流生成访问令牌,参数如下:
字符串
回复:
的
当我使用此令牌调用
PATCH
请求重置具有 * 全局管理员 * 角色的用户的密码时,我也得到了相同的错误如下:型
回复:
的
发生错误的原因是,* 用户管理员 * 角色不足以重置具有更高权限角色(如 * 全局管理员 * 角色)的用户的密码。
要解决此错误,您需要为应用程序分配更高权限的角色,如 * 全局管理员 * 或 * 已授权的授权管理员 *,可以重置任何管理员用户的密码:
的
现在,我重新生成token运行PATCH请求,成功得到response,如下所示:
型
回复:
型