UWP Microsoft.Identity.Client пройти логин без запроса - PullRequest
0 голосов
/ 29 апреля 2018

Я получаю доступ к календарю Outlook с помощью Microsoft Graph API. В своем приложении UWP я использую Microsoft.Identity.Client, который доступен на Nuget. Это работает без проблем, но впервые я хочу получить календарь пользователей, я должен войти в систему. Вот мой код для аутентификации / получения токена

private async Task<string> GetTokenForUserAsync()
{
    string tokenForUser = null;
    string[] Scopes = { "https://graph.microsoft.com/Calendars.Read" };

    PublicClientApplication identityClient = new PublicClientApplication(clientId);
    AuthenticationResult authResult;
    IEnumerable<IUser> users = identityClient.Users;

    if (users.Count() > 0)
    {
        try
        {
            authResult = await identityClient.AcquireTokenSilentAsync(Scopes, users.First());
            tokenForUser = authResult.AccessToken;
        }
        catch
        {
            tokenForUser = null;
        }
    }
    else
    {
        try
        {
            authResult = await identityClient.AcquireTokenAsync(Scopes);
            tokenForUser = authResult.AccessToken;
        }
        catch
        {
            tokenForUser = null;
        }
    }

    return tokenForUser;
}

При первом вызове этой задачи я должен войти в систему с моими учетными данными Outlook в некоем WebView, который открывается. После первого запроса это больше не требуется, так как identityClient.Users содержит моего зарегистрированного пользователя. Теперь я пытаюсь добиться того, чтобы я мог жестко закодировать свой логин и передать его аутентификации. Но единственное, что я обнаружил, - это возможность предоставить имя пользователя для входа в систему (почтовый адрес Outlook) с перегрузкой AcquireTokenAsync ()

authResult = await identityClient.AcquireTokenAsync(Scopes, "myuser@outlook.com");

Но в этом методе нет перегрузки для предоставления пароля. Так есть ли другой вариант, чтобы передать пароль на этот вызов? Основная причина, по которой я использую REST API, заключается в том, что это приложение работает в Windows 10 IoT Core и недоступно AppointmentStore (локальный календарь).

Ответы [ 2 ]

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

Попробовав разные решения, которые не дали мне того, что я ищу, я решил пойти другим путем. Теперь для чтения календаря я просто использую подписанные файлы / рисунки, которые обеспечивают доступ к календарю практически в реальном времени без авторизации.

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

Вы можете попытаться использовать класс WebAccount для хранения информации учетной записи пользователя для будущего использования после того, как пользователь авторизовал ваше приложение один раз. Пожалуйста, обратитесь к теме Web Account Manager и посмотрите на Сохранить учетную запись для использования в будущем part.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...