【问题标题】:How can I delete Azure B2C users directly from my app?如何直接从我的应用中删除 Azure B2C 用户?
【发布时间】:2020-11-29 15:11:58
【问题描述】:

我正在构建一个 ASP .Net Core Web 应用程序。我使用 Azure ADB2C 进行用户身份验证,我想要一个管理员用户,它可以删除其他用户。我可以通过 Azure 门户从 Azure Active Directory 中删除用户,但我想直接从应用程序中删除。我在我的 Active Directory 租户中创建了一个管理员帐户,并为其授予了全局管理员权限。

我尝试使用 Graph API,但无法正常工作。我根据本网站上的说明创建了一个 IAuthenticationProved: https://docs.microsoft.com/en-us/graph/sdks/choose-authentication-providers?tabs=CS.

然后我创建了 GraphServiceClient 并尝试删除用户 (https://docs.microsoft.com/en-us/graph/api/user-delete?view=graph-rest-1.0&tabs=csharp),但出现错误:

System.AggregateException: '为 login.microsoftonline.com 返回 0 个帐户和 0 个代理帐户数据提供程序。成功?真的。)'

AuthenticationException:代码:authenticationChallengeRequired 消息:需要进行身份验证。

我的代码如下所示:

            IConfidentialClientApplication confidentialClientApplication = ConfidentialClientApplicationBuilder
            .Create("<My Client ID>")
            .WithRedirectUri("<My Redirect Uri>")
            .WithClientSecret("<My Client secret>") 
            .Build();
            List<string> scopes = new List<string>();
            scopes.Add("https://graph.microsoft.com/User.ReadWrite.All");
            scopes.Add("https://graph.microsoft.com/Directory.ReadWrite.All");
            AuthorizationCodeProvider authProvider = new AuthorizationCodeProvider(confidentialClientApplication,scopes);


            GraphServiceClient graphClient = new GraphServiceClient(authProvider);


            graphClient.Users[<UserId>]
                .Request()
                .DeleteAsync()
                .Wait();

你能告诉我我做错了什么吗?或者也许还有其他方法可以做到这一点?提前谢谢!

【问题讨论】:

    标签: asp.net-core azure-active-directory microsoft-graph-api azure-ad-b2c


    【解决方案1】:

    您使用 Graph API 的方法是可行的方法。但是您面临的问题是因为您选择的身份验证提供程序(AuthorizationCodeProvider)与此处删除用户所需的范围不匹配。查看您的代码,您需要“授权代码”流程,这意味着它需要一个委托范围。如permission requirement for delete user 中所述,删除用户所需的“委托”范围是Directory.AccessAsUser.All,我在您共享的代码 sn-p 中没有看到。

    另外,建议您快速阅读Choose a Microsoft Graph authentication provider based on scenario

    注意:要添加所需的委托权限,应用程序注册必须是下面显示的前两种类型之一。第三个选项不会给你那个。 对于上述内容,您将能够添加Directory.AccessAsUser.All 委托权限。

    【讨论】:

    • 非常感谢,但我还有一个问题。我应该通过 Azure 门户向我的应用程序添加一些 API 权限吗?因为当我转到 Azure 门户 -> Azure ADB2C -> 应用程序注册 -> myApp -> API 权限 -> 添加权限 -> Microsoft Graph -> 委派权限时,除了“offline_access”之外,我没有看到任何其他要授予的权限和“openid”。我尝试将 Directory.AccessAsUser.All 范围添加到我的代码中,但它仍然不起作用。
    • 是的,您需要在应用注册中添加 API 权限。啊,我明白你为什么在那里看不到Directory.AccessAsUser.All。检查答案中附加的注释。
    • 好吧,但是如果我理解正确的话,如果我不选择第三个选项,我就不能使用B2C来认证用户。因此,我使用第一个选项在我的租户中注册了另一个应用程序,为它创建了客户端密码并将其连同其客户端 ID 一起放入我的代码中,但我仍然收到有关所需身份验证挑战的错误。谢谢你帮助我!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-16
    • 1970-01-01
    • 2022-06-27
    • 1970-01-01
    • 2019-12-27
    • 2021-03-03
    相关资源
    最近更新 更多