我正在尝试更改在 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 应用程序的情况下更改密码。
我在我的环境中尝试并得到以下结果:
最初我尝试使用您的代码并得到相同的错误:
根据MS-DOCS更改密码,我们需要
Directory.AccessAsUser.All
权限,并且仅支持委派(工作或学校帐户)。
尝试使用 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。