NodeJS 权限不足,无法完成操作Graph API Azure AD B2C

cetgtptt  于 12个月前  发布在  Node.js
关注(0)|答案(1)|浏览(137)

我正在尝试使用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重置密码

ujv3wf0j

ujv3wf0j1#

在纯应用场景下,应用必须被分配更高权限的管理员角色才能更新passwordProfile敏感属性
我注册了一个Azure AD应用程序,并添加了相同的API权限,如下所示:


的数据
现在,我为应用程序分配了用户管理员角色,如下所示:



在我的例子中,我使用Postman使用客户端凭据流生成访问令牌,参数如下:

POST https://login.microsoftonline.com/tenantId/oauth2/v2.0/token
grant_type:client_credentials
client_id: appId
client_secret: secret 
scope: https://graph.microsoft.com/.default

字符串

回复:



当我使用此令牌调用PATCH请求重置具有 * 全局管理员 * 角色的用户的密码时,我也得到了相同的错误如下:

PATCH https://graph.microsoft.com/v1.0/users/{id}
Content-type: application/json

{
  "passwordProfile": {
    "forceChangePasswordNextSignIn": false,
    "password": "xxxxxxxxxx"
  }
}

回复:



发生错误的原因是,* 用户管理员 * 角色不足以重置具有更高权限角色(如 * 全局管理员 * 角色)的用户的密码。
解决此错误,您需要为应用程序分配更高权限的角色,如 * 全局管理员 * 或 * 已授权的授权管理员 *,可以重置任何管理员用户的密码:



现在,我重新生成token运行PATCH请求,成功得到response,如下所示:

PATCH https://graph.microsoft.com/v1.0/users/{id}
Content-type: application/json

{
  "passwordProfile": {
    "forceChangePasswordNextSignIn": false,
    "password": "xxxxxxxxxx"
  }
}

回复:


相关问题