Консольное приложение Microsoft Graph - авторизация через ADAL

У меня есть консольное приложение, в котором пользователь в настоящее время должен нажать "Войти", чтобы получить токен для приложения Microsoft Graph.

Можно ли сделать это "автоматическим входом"?

Я вижу, что метод AcquireTokenAsync имеет несколько перегрузок:

public static string GetAccessToken()
{
    // Create the authentication context (ADAL)
    var authenticationContext = new AuthenticationContext(Authority);

    var authenticationResult = authenticationContext.AcquireTokenAsync(GraphResource, 
        ClientId, RedirectUri, new PlatformParameters(PromptBehavior.Auto, true));
    var accessToken = authenticationResult.Result.AccessToken;
    return accessToken;
}

Я не могу создать клиентский секрет для собственного приложения, которое делает невозможным использование этих альтернативных перегрузок.

Можно ли сделать журнал приложений сам по себе?

2 ответа

Решение

Если вы посмотрите на официальные образцы Azure SDK, даже Microsoft вроде бы признает, что их решения иногда бывают ужасными:

Введите понятное имя для приложения, например "TodoListDaemon", и выберите "Веб-приложение и / или Веб-API" в качестве типа приложения. Поскольку это приложение является демоном, а не веб-приложением, у него нет URL-адреса для входа, поэтому для этого поля просто введите " http://todolistdaemon/".

Таким образом, в качестве ярлыка для документов, используйте перегрузку, которая запрашивает ClientCredential:

var authenticationResult = await authContext.AcquireTokenAsync(todoListResourceId, clientCredential);

Другой способ - использовать объект userpasswordcredential, который унаследован от usercredential, и использовать метод acqutoken для получения токена, что избавляет от необходимости подписывать аутентификацию. Очевидно, что это не так безопасно, как метод демона, описанный в другом ответе.

Другие вопросы по тегам