Я получаю доступ к календарю 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 (локальный календарь).