azure 读取工作时MS Graph中的用户更新不工作

k3bvogb1  于 2023-04-22  发布在  其他
关注(0)|答案(1)|浏览(119)

我正在使用Microsoft Graph API访问我的Azure B2C租户。
下面是我的代码:

var scopes = new[] { "https://graph.microsoft.com/.default" };
    var clientSecretCredential = new ClientSecretCredential(_azureB2CSettings.Value.TenantId,
        _azureB2CSettings.Value.AppId.ToString(), _azureB2CSettings.Value.ClientSecret);
    var graphClient = new GraphServiceClient(clientSecretCredential, scopes);
        var user = await graphClient.Users[azureVetOsId.ToString()].Request().GetAsync();
        if (user == null)
        {
            throw new AzureB2CUserNotFound(azureVetOsId.ToString());
        }
        
        user.PasswordProfile = new PasswordProfile()
        {
            Password = newPassword,
            ForceChangePasswordNextSignIn = false,
        };

        await graphClient.Users[azureVetOsId.ToString()].Request().UpdateAsync(user);

get操作工作得很好,我得到了用户,可以看到所有数据。我甚至在几秒钟前用Graph API创建了用户,没有问题。现在,UpdateAsync Requests get是一个

Message: Insufficient privileges to complete the operation.

我检查了Azure中应用程序注册的权限:

这似乎很好,User.ReadWrite.All设置正确。
有什么想法吗

g52tjvyc

g52tjvyc1#

发现问题:除了委派的权限之外,您还需要是用户管理员,并作为您在此处使用的应用程序/用户的角色:

除此之外,代码永远不应该在更新中发送加载的对象,而只是要更新的属性:

await graphClient.Users[azureVetOsId.ToString()].Request().UpdateAsync(new User()
        {
            PasswordProfile = new PasswordProfile()
            {
                Password = newPassword,
            }
        });

相关问题