Как создать токен аутентификации Azure Active Directory (AAD) для Graph API без интерактивного экрана входа в систему для консольного / собственного приложения? - PullRequest
1 голос
/ 29 мая 2019

Как создать токен аутентификации Azure Active Directory (AAD) для Graph API без интерактивного экрана входа в систему для консольного / собственного приложения?

Подробности. Я использую Graph API для чтения электронных писем с помощью Azure Active Directory (AAD) с разрешениями «Делегированный».

Разрешение «Приложение» позволяет пользователю читать другие почтовые ящики, и администрация не дает согласия на этот подход из-за соображений безопасности, поэтому я использую разрешения «Делегированные».

Моя консоль/ родное приложение зарегистрировано в AAD.

Поскольку AAD генерирует токен аутентификации OAuth для конкретной учетной записи, используя: 1. Идентификатор клиента 2. Идентификатор клиента 3. Секрет клиента (ключ / пароль для приложения) 4. Учетные данные для входаопределенной учетной записи.

Я могу сгенерировать токен с помощью интерактивного экрана входа в систему.

Однако мне нужен механизм, с помощью которого я могу сгенерировать токен AAD для Graph API (ресурс) без интерактивного входа в систему.экран в коде с использованием C # или .NET

Ответы [ 2 ]

0 голосов
/ 30 мая 2019

Это сработало у меня с кодом ниже.Теперь я могу получить токен с учетными данными пользователя и могу читать почтовый ящик.

private static async Task<string> GetToken()
    {
        string authority = "https://login.microsoftonline.com/{tenantId}";
        string resource = "https://graph.microsoft.com";
        string userName = "xxxxxxxxx";
        string password = "xxxxxxx";
        string clientId = "Your Client ID (GUID)";

        UserPasswordCredential userPasswordCredential = new UserPasswordCredential(userName, password);

        AuthenticationContext authenticationContext = new AuthenticationContext(authority);
        var result = AuthenticationContextIntegratedAuthExtensions.AcquireTokenAsync(authenticationContext, resource, clientId, userPasswordCredential).Result;

        return result.AccessToken;            
    }
0 голосов
/ 29 мая 2019

Кажется, вы пытаетесь получить свой токен, не запрашивая страницу входа.

Да, вы можете сделать это, используя client_credentials предоставить аутентификацию потока в C#.Net

См. Следующий фрагмент кода:

Класс токена доступа:

 public  class AccessTokenClass
        {
            public string access_token { get; set; }
            public string token_type { get; set; }
            public long expires_in { get; set; }
        }

Метод запроса токена:

private async Task<string> GetYourTokenWithClientCredentialsFlow()
        {
            string tokenUrl = $"https://login.microsoftonline.com/YourTenant/oauth2/token";
            var tokenRequest = new HttpRequestMessage(HttpMethod.Post, tokenUrl);

            tokenRequest.Content = new FormUrlEncodedContent(new Dictionary<string, string>
            {
                ["grant_type"] = "client_credentials",
                ["client_id"] = "5f14dea0-5cd---Your_Client_Id----8950-4f646829f870",
                ["client_secret"] = "031Fnwih---Your_Client_Secret----Fx+Ase3V65lpWQ=",
                ["resource"] = "https://graph.microsoft.com" // https://management.azure.com/ Or Any Resource You Want
            });

            dynamic json;
            dynamic token;
            HttpClient client = new HttpClient();

            var tokenResponse = await client.SendAsync(tokenRequest);

            json = await tokenResponse.Content.ReadAsStringAsync();
            token = JsonConvert.DeserializeObject<AccessTokenClass>(json);
            Console.WriteLine("Your Access Token {0}",token.access_token);
            return token;
        }

Ответ сгенерированного токена:

Как только вы установите все необходимые учетные данные, вы получите токен в ответ. Смотрите снимок экрана ниже:

enter image description here

Примечание: Этот поток аутентификации будет генерировать для вас токен без интерактивного экрана входа в систему. Если у вас есть какие-либо вопросы, не стесняйтесь поделиться в комментариях. Спасибо и счастливого кодирования!

Обновление:

Назначить выделенное разрешение на чтение почты. Выполните следующие шаги:

  1. Azure active directory
  2. Регистрация приложения
  3. Выберите приложение
  4. API-разрешения
  5. Добавить разрешение
  6. График Microsoft
  7. Делегированные разрешения
  8. Mail
  9. Mail.Read (читать почту пользователя)
  10. Добавить разрешение
  11. Предоставить согласие администратора

См. Снимок экрана:

enter image description here

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