代表用户更改 Azure B2C 帐户密码

问题描述 投票:0回答:2

我正在尝试更改在 Azure B2C 租户中创建的用户的密码。我正在使用 Microsoft.Graph C# SDK 进行 API 调用。

首先,我通过提供租户的详细信息来创建 GraphServiceClient:

var options = new TokenCredentialOptions
{
   AuthorityHost = AzureAuthorityHosts.AzurePublicCloud
};
    
var clientSecretCredential = new ClientSecretCredential("tenantId", "clientId",  "clientSecret", options);
    
_client = new GraphServiceClient(clientSecretCredential);

然后我使用客户端内置的方法来更改用户的密码:

await _client.Users["userId"].ChangePassword(currentPassword, newPassword).Request().PostAsync();

但是我收到以下错误:

Microsoft.Graph.ServiceException:代码:Authorization_RequestDenied 消息:更改密码操作的访问被拒绝。

是否可以代表用户更改密码?我在互联网上发现了关于这个主题的相互矛盾的信息。如果这是不可能的,那么有效的方法是什么?

我有一个 SPA 前端应用程序,其中用户通过重定向流进行身份验证。然后,访问令牌被传递到我的后端以授权请求。也许我可以使用这个令牌以某种方式访问 MS Graph API 并更改密码?

注意:我想让用户在不离开我的 SPA 应用程序的情况下更改密码。

azure microsoft-graph-api azure-ad-b2c
2个回答
0
投票

我在我的环境中尝试并得到以下结果:

最初我尝试使用您的代码并得到相同的错误:

enter image description here

根据MS-DOCS更改密码,我们需要

Directory.AccessAsUser.All
权限,并且仅支持委派(工作或学校帐户)。

enter image description here

尝试使用 Graph API 在 B2C 租户中重置密码是不可能的。不幸的是,因为没有

Directory.AccessAsUser.All
,B2C 租户不允许此类密码重置。对于 B2C 租户,Graph API 包含该权限。 B2C 租户中仅提供离线访问和 openID 作为委托权限。

您可以在 B2C 租户中重置密码,管理员可以通过 Azure 门户执行密码重置,也可以使用密码重置策略,也可以参考此 MS-Q&A 在 powershell 和 postman 中更新密码。

参考:

“来自值为 null 的声明的 Upn 不是有效的 upn。” - Microsoft 问答,作者:amanpreetsingh-msft。


0
投票

我正在使用该应用程序创建用户并重置其密码。以下是应用程序注册所需的唯一三个权限。

此外,需要将“应用程序(客户端)ID”添加到身份验证管理员角色。

© www.soinside.com 2019 - 2024. All rights reserved.