更改密码操作在 Graph API 中引发异常 "Unsupported User Type 'Unknown'"

ChangePassword operation throws exception "Unsupported User Type 'Unknown'" in GraphAPI

用户使用 Active Directory B2C 工作流程注册,因此他们显示为成员

我想做的是像解释的那样更改用户密码 here

所以我的代码如下所示:

        var options = new TokenCredentialOptions
        {
            AuthorityHost = AzureAuthorityHosts.AzurePublicCloud
        };

        var userNamePasswordCredential = new UsernamePasswordCredential(
                email, currentPassword, "my tenant id", "my client id", options);

        var authentication = await userNamePasswordCredential.AuthenticateAsync();

        var scopes = new[] { "User.Read" };
        var graphClient = new GraphServiceClient(userNamePasswordCredential, scopes);

        var user = await graphClient.Me
            .Request()
            .GetAsync();

        await graphClient.Me
            .ChangePassword(currentPassword, newPassword)
            .Request()
            .PostAsync();

我尝试了很多东西,但我总是遇到同样的异常:

例外情况如下:

MsalClientException: Unsupported User Type 'Unknown'. Please see https://aka.ms/msal-net-up.

AuthenticationFailedException: UsernamePasswordCredential authentication failed: Unsupported User Type 'Unknown'. Please see https://aka.ms/msal-net-up.

所以我的问题是,是否可以自动更改在 ADB2C 中注册的用户的密码?

如果是,是什么导致了异常?

我知道我可以更改以管理员身份更新 PasswordProfile 的用户的密码,但我想以某种方式验证他们知道他们当前的密码。

您不能使用 Azure AD B2C 帐户向 Microsoft Graph 进行身份验证API。

您必须为此操作从 Azure 门户中的 AAD 用户边栏选项卡创建一个普通的 Azure AD 帐户。这意味着,这对 B2C 用户根本不起作用。

对于更改密码流程,创建一个 self service change-password flow 用户可以自己完成的流程。

或者,您必须创建一个 API 端点,B2C 保护的应用程序可以调用该端点。 API 必须在 密码配置文件 .

上使用 client_credentials flow to call Graph API and perform the Update User 操作