“GetAccountsAsync”在我的 .NET Maui 应用程序中返回 null (C#)

'GetAccountsAsync' returns null in my .NET Maui application (C#)

提问人:Andreas 提问时间:6/30/2023 最后编辑:Andreas 更新时间:6/30/2023 访问量:158

问:

我有一个应该使用 MSAL 身份验证 (B2B) 的 .NET Maui 应用程序。使用用户名和密码登录有效。但是,我想检查应用程序启动时缓存中是否存储了有效的访问令牌。代码行返回 null,这就是该方法从不工作的原因。有谁知道为什么这是空的?我是否需要手动将令牌写入缓存,还是自动完成?有人对替代方案有建议吗?var accounts = await _application.GetAccountsAsync();AcquireTokenSilent

_application.GetAccountsAsync().IsFaulted是错误的。

我的身份验证过程代码如下:

private static IPublicClientApplication _application;
private static AuthenticationResult _authenticationResult;

private static void BuildApplication()
{
    _application = PublicClientApplicationBuilder.Create(B2BConstants.ClientId)
        .WithTenantId(B2BConstants.TenantId)
        .WithAuthority(B2BConstants.Authority)
        .WithRedirectUri("http://localhost")
        .Build();
}


/// <summary>
/// MSAL Authenticate Silent with token cache.
/// </summary>
/// <returns>AccessToken as String</returns>
public static async Task<string> AuthenticateSilentAsync()
{
    if (_application == null) BuildApplication();
    var accounts = await _application.GetAccountsAsync();

    _authenticationResult = await _application.AcquireTokenSilent(B2BConstants.Scopes, accounts.FirstOrDefault())
        .ExecuteAsync();

    return _authenticationResult.AccessToken;
}

public static async Task<string> AuthenticateAsync(string username, string password)
{
    BuildApplication();
    _authenticationResult = null;

    try
    {
        return await AuthenticateSilentAsync();
        
    }
    catch (MsalUiRequiredException ex)
    {
        try
        {
            _authenticationResult = await _application.AcquireTokenByUsernamePassword(B2BConstants.Scopes, username, password)
                .WithTenantId(B2BConstants.TenantId)
                .ExecuteAsync();

            return _authenticationResult.AccessToken;
        }
        catch (MsalException msalex)
        {
            return null;
        }
    }
    catch (Exception ex)
    {
        return null;
    }
}

我已经尝试使用该方法检索令牌,以便将结果传递给 。但是,帐户始终为 null。GetAccountsAsyncAcquireTokenSilent

C# 身份验证 null MSAL acquireTokenSilent

评论

0赞 jdweng 6/30/2023
BuildApplication() 无法正常工作。可能是B2BConstants.ClientId有问题。
0赞 Andreas 6/30/2023
我已检查客户端和租户 ID。这是正确的。
0赞 jdweng 6/30/2023
确保您正确配置了应用程序:learn.microsoft.com/en-us/azure/developer/mobile-apps/...
0赞 Andreas 7/3/2023
我完全按照说明进行操作。不幸的是,令牌缓存仍然不起作用。
0赞 jdweng 7/3/2023
尝试测试:learn.microsoft.com/en-us/azure/developer/mobile-apps/... 和 learn.microsoft.com/en-us/azure/developer/mobile-apps/...

答: 暂无答案