Аутентификация Microsoft Graph API - PullRequest
       8

Аутентификация Microsoft Graph API

0 голосов
/ 09 сентября 2018

Я на самом деле изучаю api microsoft graph и ищу решение для аутентификации пользователя без какого-либо взаимодействия, но не могу найти решение. Каждый пример кода, который я нашел, требовал взаимодействия с пользователем, чтобы подключиться к Microsoft для получения токена. Есть ли возможность избежать взаимодействия с пользователем?

В противном случае я нашел обходной путь с потоком учетных данных клиента в этом примере: https://github.com/microsoftgraph/console-csharp-snippets-sample но если я попытаюсь реализовать этот код в приложении mav c # Asp.net или в приложении windows form, я не смогу получить маркер приложения. Если я отлаживаю приложение, оно застревает в ожидании токена, но не выдает ошибку (защита от вирусов уже отключена). У кого-нибудь есть идеи по поводу основной проблемы или моего решения?

Это код моего обходного пути, пытающегося получить токен, но он застрял на daemonClient.AcquireTokenForClientAsync.

   public async Task<Users> GetUser(string Username)
    {
        MSALCache appTokenCache = new MSALCache(clientId);

        ClientCredential clientdummy = new ClientCredential(clientSecret);

        ConfidentialClientApplication daemonClient = new ConfidentialClientApplication(clientId, string.Format(AuthorityFormat, tenantId), redirectUri,
                                                            clientdummy, null, null);

        authenticate(daemonClient).Wait();

        string token = authResult.AccessToken;

        client = GetAuthenticatedClientForApp(token);

        IGraphServiceUsersCollectionPage users = client.Users.Request().GetAsync().Result;
    }

    private async Task<AuthenticationResult> authenticate(ConfidentialClientApplication daemonClient)
    {
        authResult = await daemonClient.AcquireTokenForClientAsync(new[] { MSGraphScope });
        return authResult;
    }

Ответы [ 2 ]

0 голосов
/ 10 сентября 2018

Найдено обходное решение: получение токена через REST API. Здесь я могу получить токен пользователя или токен клиента для доступа к графику API:

 var client = new RestClient("https://login.microsoftonline.com/" + domainname);
 var request = new RestRequest("/oauth2/token", Method.POST);   request.AddBody("grant_type", "client_credentials");
        request.AddParameter("client_id", clientId);
        request.AddParameter("client_secret", clientSecret);
        request.AddParameter("Resource", "https://graph.microsoft.com");
        request.AddParameter("scope", "[scopes]"); 
        IRestResponse response = client.Execute(request);
        //contains the token 
        var content = response.Content;
0 голосов
/ 10 сентября 2018

Согласно вашему описанию, я предполагаю, что вам нужно решение для аутентификации пользователя без какого-либо взаимодействия.

Мы можем получить токен доступа с помощью некоторых фоновых сервисов или демонов.

Для получения более подробной информации, мы можем обратиться к этому документу .

Основываясь на моем тесте, мы можем попробовать следующие шаги:

Сначала мыдолжен получить согласие администратора:

app.UseOpenIdConnectAuthentication(new OpenIdConnectAuthenticationOptions
                                           {
                                               ClientId = clientId,
                                               Authority = authority,
                                               RedirectUri = redirectUri,
                                               PostLogoutRedirectUri = redirectUri,
                                               Scope = "openid profile",
                                               ResponseType = "id_token",
                                               TokenValidationParameters = new TokenValidationParameters { ValidateIssuer = false, NameClaimType = "name" },
                                               Notifications = new OpenIdConnectAuthenticationNotifications
                                                               {
                                                                   AuthenticationFailed = this.OnAuthenticationFailedAsync,
                                                                   SecurityTokenValidated = this.OnSecurityTokenValidatedAsync
                                                               }
                                           });



ConfidentialClientApplication daemonClient = new ConfidentialClientApplication(Startup.clientId, string.Format(AuthorityFormat, tenantId), Startup.redirectUri,
                                                                                       new ClientCredential(Startup.clientSecret), null, appTokenCache.GetMsalCacheInstance());
AuthenticationResult authResult = await daemonClient.AcquireTokenForClientAsync(new[] { MSGraphScope });

Затем мы можем использовать этот токен доступа для использования API-интерфейсов Graph.

Для получения более подробной информации можно обратиться к примеру демона v2.0. на GitHub.

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