AcquireTokenSilentAsync не может аутентифицировать пользователя - PullRequest
0 голосов
/ 14 мая 2018

Я пытаюсь получить молчаливый запрос токена для инициализации объекта ConfidentialClientApp, как в проекте «Microsoft Graph SDK ASPNET Connect» и обрисован в общих чертах в Добавление входа с помощью Microsoft в веб-приложение ASP.NET

С моим кодом, отражающим примеры выше, я ожидаю, что мой вызов вернет успешный результат с доступом к.

var result = await cca.AcquireTokenSilentAsync(graphScopes, cca.Users.First());

return result.AccessToken;

Однако я получаю сообщение об ошибке, в котором говоритсяпользователь должен быть аутентифицирован.Я не уверен, что мне не хватает в примерах, которые заставляют их работать в них.

1 Ответ

0 голосов
/ 14 мая 2018

Вы можете получить токен в автоматическом режиме только в том случае, если для этого пользователя уже есть кэшированный токен, который включает в себя запрашиваемые области (может иметь больше, но должен иметь по крайней мере то, о чем вы просили).

Именно поэтому AcquireTokenSilentAsync всегда следует заключать в блок Try / Catch.Если не удается найти соответствующий токен, необходимо запустить интерактивный поток.Вот пример из MSAL Wiki :

AuthenticationResult result = null;
try
{
    result = await app.AcquireTokenSilentAsync(scopes, app.Users.FirstOrDefault());
}
catch (MsalUiRequiredException ex)
{
    // A MsalUiRequiredException happened on AcquireTokenSilentAsync. 
    // This indicates you need to call AcquireTokenAsync to acquire a token
    System.Diagnostics.Debug.WriteLine($"MsalUiRequiredException: {ex.Message}");

    try
    {
        result = await app.AcquireTokenAsync(scopes);
    }
    catch (MsalException msalex)
    {
        ResultText.Text = $"Error Acquiring Token:{System.Environment.NewLine}{msalex}";
    }
}
catch (Exception ex)
{
    ResultText.Text = $"Error Acquiring Token Silently:{System.Environment.NewLine}{ex}";
    return;
}

if (result != null)
{
    string accessToken = result.AccessToken;
    // Use the token
}
...