使用Office365图形获取Teams消息时遇到问题。
我使用
获取访问令牌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;
}
然后获取“团队”消息,我将其用作Endint:
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;
}
}
}
每次在任何Beta端点上运行时,都会引发未授权的错误,但在v1.0端点上运行正常。
我想念的是什么,我假设它与访问令牌有关,但是我所做的所有研究都没有解决问题。
答案 0 :(得分:0)
测试版仍可能更改,因此,请尽可能使用V1.0终结点。对于未经授权的错误,我无法完全重现该问题。根据我的测试,端点在Graph Explorer中运行良好:
https://graph.microsoft.com/beta(V1.0)/teams/{teamID}/channels/{channelid}/messages
但是根据我的测试,端点在MVC / NETCore项目中不起作用,我使用了以下身份验证令牌,但没有使用您使用的ADALToken:
string accessToken = await SampleAuthProvider.Instance.GetUserAccessTokenAsync();
我的摘要异常是由令牌逻辑引起的,而不是HttpClient请求,我可以使用该请求来处理其他api。另一种可能性,我们无法确认,API内部处理遇到了问题。但是我们可以在Graph Explorer中使用API,因此这种可能性也不高。我认为您可以先尝试其他令牌,但不能尝试ADALToken。