首页 > 解决方案 > Azure B2C - PublicClientApplication.AcquireTokenByUsernamePasswordAsync 失败

问题描述

我无法使用 .net 核心控制台应用程序中的用户名和密码登录我的 Azure B2C Active Directory。我正在使用 nuget 的 MSAL 库 2.6。我在 GitHub https://github.com/Azure-Samples/active-directory-dotnetcore-console-up-v2上找到了这个示例

我将代码减少到最低限度,如下所示:

public static async Task TestLogin()
{
    try
    {
        var scopes = new[] { "community.member" };
        var username = "{user@domain.com}";
        var password = new SecureString();

        foreach (var c in "{Password}")
        {
            password.AppendChar(c);
        }

        var app = new PublicClientApplication("{B2C Application ID}", "https://{Application Name}.b2clogin.com/tfp/xxxxxxx-xxxx-xxxxxxxxxxxx/B2C_1_NativeSigneIn");

        var result = await app.AcquireTokenByUsernamePasswordAsync(scopes, username, password);
        Console.WriteLine($"Token: {result.AccessToken}");
    }
    catch (MsalServiceException ex)
    {
        Console.WriteLine($"{ex.Message} - {ex.ErrorCode}");
    }
}

我总是收到以下 MSAL 异常:消息:用户领域发现失败错误代码:user_realm_discovery_failed

标签: azure-ad-b2cmsal

解决方案


旧图书馆有一个错误。新版本的 MSAL 具有此修复程序。您可以在此处阅读有关该问题和解决方案的信息:

https://github.com/AzureAD/microsoft-authentication-library-for-dotnet/issues/926

基本上,您需要下载其中一位开发人员从 GITHUB 源编译的包的本地版本,通过将 NuGet 包管理器指向下载的包从您的解决方案中引用该包,然后您需要为新的 Fluent API 重新编写 API对于 MSAL,它会起作用的!就这么简单。


推荐阅读