Какой правильный поток для получения групп текущего пользователя из графа Microsoft? - PullRequest
0 голосов
/ 18 января 2020

Привет! Я реализую авторизацию на основе групп для моего веб-API. У меня есть клиентское приложение чванство. Через swagger я вхожу в систему и вызываю веб-API. В веб-API я хочу реализовать авторизацию на основе групп через граф Microsoft. Когда я регистрируюсь через чванство, я получаю один токен и перехожу к своим вебапам. Если я не ошибаюсь, сейчас мне понадобился один токен для вызова графа Microsoft. Так можно ли использовать тот же токен для вызова графа Microsoft? Я запутался и внедрил поток учетных данных клиента. Клиентский поток учетных данных получит токен для приложения (здесь пользователь, вошедший в токен, не имеет ничего общего).

   public static async Task<GraphServiceClient> GetGraphServiceClient()
        {
            // Get Access Token and Microsoft Graph Client using access token and microsoft graph v1.0 endpoint
            var delegateAuthProvider = await GetAuthProvider();
            // Initializing the GraphServiceClient
            graphClient = new GraphServiceClient(graphAPIEndpoint, delegateAuthProvider);

            return graphClient;
        }


        private static async Task<IAuthenticationProvider> GetAuthProvider()
        {
            AuthenticationContext authenticationContext = new AuthenticationContext(authority);
            ClientCredential clientCred = new ClientCredential(clientId, clientSecret);

            // ADAL includes an in memory cache, so this call will only send a message to the server if the cached token is expired.
            AuthenticationResult authenticationResult = await authenticationContext.AcquireTokenAsync(graphResource, clientCred).ConfigureAwait(false);
            var token = authenticationResult.AccessToken;

            var delegateAuthProvider = new DelegateAuthenticationProvider((requestMessage) =>
            {
                requestMessage.Headers.Authorization = new AuthenticationHeaderValue("bearer", token.ToString());
                return Task.FromResult(0);
            });

            return delegateAuthProvider;
        }

Ниже код вернет все группы.

GraphServiceClient client = await MicrosoftGraphClient.GetGraphServiceClient();
 var groupList = await client.Groups.Request().GetAsync();

но мое требование получить текущую подписку в группе пользователей. Так может кто-нибудь помочь мне, какой поток я должен использовать и только в приведенном выше коде Можно ли получить группу текущих пользователей? Может ли кто-нибудь помочь мне понять их и правильно реализовать? Любая помощь будет принята с благодарностью. Спасибо

1 Ответ

1 голос
/ 20 января 2020

Как мы уже говорили ранее, вы должны вызывать Microsoft Graph API из своего приложения webapi.

Поэтому вам не следует использовать тот же токен доступа для вызова Microsoft Graph. Вы должны указать конечную точку Microsoft Graph (https://graph.microsoft.com) в качестве ресурса при запросе нового токена доступа к Microsoft Graph.

Во-вторых, поток учетных данных клиента означает разрешение только для приложения (без пользователь). Так что, если нет зарегистрированного пользователя, как мы можем получить группы пользователей?

Вам следует рассмотреть возможность использования AcquireTokenAsyn c (String, ClientAssertion, UserAssertion) .

После этого используйте следующий код для получения зарегистрированных пользователей.

GraphServiceClient client = await MicrosoftGraphClient.GetGraphServiceClient();
var memberOf = await graphClient.Me.MemberOf.Request().GetAsync();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...