Microsoft graph api Microsoft.Graph.GraphServiceClient允许我创建用户,但不允许我更改密码

Microsoft graph api Microsoft.Graph.GraphServiceClient允许我创建用户,但不允许我更改密码,microsoft-graph-api,azure-ad-b2c,Microsoft Graph Api,Azure Ad B2c,我有一个由托管在Azure中的Angular SPA和一些用于API的Azure函数组成的系统。在一个管理应用程序中,我创建了一个应用程序,允许管理员用户创建新的用户帐户,包括指定密码。这些新帐户也可以登录到我创建的业务线应用程序。我们需要允许创建帐户的人重置密码。出于某种原因,我编写的用于设置密码的代码不起作用。一个用户可以创建一个帐户,包括设置密码,这似乎很奇怪,但由于某种原因,同一个用户不能独立于创建用户帐户来设置密码。仅供参考,没有电子邮件,这些都是用户帐户,因此无法请求密码重置 以下是

我有一个由托管在Azure中的Angular SPA和一些用于API的Azure函数组成的系统。在一个管理应用程序中,我创建了一个应用程序,允许管理员用户创建新的用户帐户,包括指定密码。这些新帐户也可以登录到我创建的业务线应用程序。我们需要允许创建帐户的人重置密码。出于某种原因,我编写的用于设置密码的代码不起作用。一个用户可以创建一个帐户,包括设置密码,这似乎很奇怪,但由于某种原因,同一个用户不能独立于创建用户帐户来设置密码。仅供参考,没有电子邮件,这些都是用户帐户,因此无法请求密码重置

以下是错误:

{
  "error": {
    "code": "Authorization_RequestDenied",
    "message": "Access to change password operation is denied.",
    "innerError": {
      "date": "2021-01-19T21:58:35",
      "request-id": "a1bc5b50-83e9-47ae-97c7-bda4f524fa0e",
      "client-request-id": "a1bc5b50-83e9-47ae-97c7-bda4f524fa0e"
    }
  }
}
这是我的密码:

//this is the method that works
public async Task<Microsoft.Graph.User> CreateUserAsync(string givenName,
    string surname, string displayName, string userPrincipalName, string issuer, 
    string signInType, string initialPassword, GraphServiceClient graphClient) 
{
    var user = new Microsoft.Graph.User {
        AccountEnabled = true,
        GivenName = givenName,
        Surname = surname,
        DisplayName = displayName,
        Identities = new List<ObjectIdentity>() {
            new ObjectIdentity {
                Issuer = issuer, 
                IssuerAssignedId = userPrincipalName,
                SignInType = signInType
            }
        },
        PasswordProfile = new PasswordProfile {
            ForceChangePasswordNextSignIn = false,
            Password = initialPassword
        }
    };

    return await graphClient.Users
        .Request()
        .AddAsync(user);
}

//This one does not work, returns: Access to change password operation is denied.
public async Task<Microsoft.Graph.User> SetPasswordAsync(
string userName, string currentPassword, string newPassword, GraphServiceClient graphClient) 
{
    await graphClient.Users[userName].ChangePassword(currentPassword, newPassword).Request().PostAsync();

    return something here;
}
//这就是有效的方法
公共异步任务CreateUserAsync(字符串givenName,
字符串姓氏、字符串显示名、字符串用户名、字符串颁发者、,
字符串符号类型、字符串初始密码、GraphServiceClient(graphClient)
{
var user=new Microsoft.Graph.user{
AccountEnabled=true,
GivenName=GivenName,
姓,
DisplayName=DisplayName,
标识=新列表(){
新客观性{
发行人=发行人,
issuerasignedid=userPrincipalName,
符号类型=符号类型
}
},
PasswordProfile=新的PasswordProfile{
ForceChangePasswordNextSignIn=false,
密码=初始密码
}
};
return wait graphClient.Users
.Request()
.AddAsync(用户);
}
//此操作不起作用,返回:更改密码操作的访问被拒绝。
公共异步任务SetPasswordAsync(
字符串用户名、字符串currentPassword、字符串newPassword、GraphServiceClient graphClient)
{
等待graphClient.Users[userName]。更改密码(currentPassword,newPassword)。请求().PostAsync();
在这里归还一些东西;
}

这似乎是一个权限问题。函数:
graphClient.Users[].ChangePassword()
的基础是,正如官方文件所指出的,此处仅授权权限有效,权限:
UserAuthenticationMethod.ReadWrite.All
是必需的。 在我将此权限授予我的应用程序后:

它非常适合我:


如果您还有任何问题,请告诉我。

这可能对您有帮助吗?你的问题解决了吗?