Office 365 Graph, получающий сообщения команд Microsoft - PullRequest
0 голосов
/ 06 сентября 2018

Проблемы с получением сообщений Команд с помощью Графика Office365.

Я получаю токен доступа, используя

string signedInUserID = ClaimsPrincipal.Current.FindFirst("http://schemas.microsoft.com/identity/claims/objectidentifier").Value;
if (HttpContext.Current.Application.Count > 0)
{
    signedInUserID = HttpContext.Current.Application.Keys[0].Replace("_TokenCache", "");
}
HttpContextBase httpContextBase = HttpContext.Current.GetOwinContext().Environment["System.Web.HttpContextBase"] as HttpContextBase;

ADALTokenCache tokenCache = new ADALTokenCache(signedInUserID);
var cachedItems = tokenCache.ReadItems(); // see what's in the cache

AuthenticationContext authContext = new AuthenticationContext(Authority, tokenCache);
ClientCredential clientCredential = new ClientCredential(clientId, appKey);
string userObjectId = ClaimsPrincipal.Current.FindFirst("http://schemas.microsoft.com/identity/claims/objectidentifier").Value;
UserIdentifier userId = new UserIdentifier(userObjectId, UserIdentifierType.UniqueId);
try
{
    AuthenticationResult result = await authContext.AcquireTokenAsync(graphResourceID2, clientCredential).ConfigureAwait(false);
    return result.AccessToken;
}

Затем, чтобы получить сообщения Команд, я использую это в качестве конечного:

https://graph.microsoft.com/beta/teams/{teamID}/channels/{channelid}/messages

Используя токен доступа, полученный сверху, и конечной точкой я делаю следующее:

using (var client = new HttpClient())
{
    using (var request = new HttpRequestMessage(HttpMethod.Get, endpoint))
    {
        request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
        request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
        using (var response = await client.SendAsync(request).ConfigureAwait(false))
        {
            if (response.IsSuccessStatusCode)
            {
                var json = await response.Content.ReadAsStringAsync().ConfigureAwait(false);
                var result = JsonConvert.DeserializeObject<GraphOdataResponse>(json);
                myTeamsMessages = result.messages.ToList();
            }

            return myTeamsMessages;
        }
    }
}

Каждый раз, когда он работает с любой из конечных точек бета-версии, он выдает несанкционированную ошибку, но с конечными точками v1.0 он работает нормально.

Чего мне не хватает, я предполагаю, что это как-то связано с токеном доступа, но все проведенные исследования не устранили проблему.

1 Ответ

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

Бета-версия все еще может быть изменена, поэтому, если возможно, используйте конечную точку V1.0.А из-за несанкционированной ошибки я не могу полностью воспроизвести проблему.Исходя из моего теста, конечная точка хорошо работает в Graph Explorer:

https://graph.microsoft.com/beta(V1.0)/teams/{teamID}/channels/{channelid}/messages

Но, исходя из моего теста, конечная точка не работает в проекте MVC / NETCore, я использовал следующий authtoken, но не ADALTokenкоторый вы используете:

string accessToken = await SampleAuthProvider.Instance.GetUserAccessTokenAsync(); 

Мое резюме исключение вызвано логикой токена, но не запросом HttpClient, я могу использовать этот запрос для обработки других API.Еще одна возможность, которую мы не можем подтвердить, что внутренняя обработка API столкнулась с проблемой.Но мы можем использовать API в Graph Explorer, поэтому эта возможность также невелика.Я думаю, что вы можете попробовать другой токен, но не сначала ADALToken.

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