我正在关注Microsoft Graph repository on github提供的示例 . 在其中,它描述了使用需要访问令牌的DelegateAuthenticationProvider . Marc LaFleur的primer on auth flow指定了一种方法来获取访问令牌,我将其与guidance结合起来进行服务 - 服务身份验证工作 .
即使我收到 appears to be a valid access token ,当我通过图形客户端发出命令时,我从Microsoft Graph得到一个ServiceException,说明,
“{代码:InvalidAuthenticationToken消息:访问令牌验证失败 . 内部错误}”
我没有看到任何其他内部错误 .
我做错了什么?
这是我提出的代码:
var clientId = "[app-guid]";
var clientSecret = "[secret-from-app-dashboard]";
var resource = "[app-guid]";
var baseUrl = "https://login.microsoftonline.com";
var loginUrl = "/[tenant guid]/oauth2/token";
using (var client = new HttpClient())
{
client.BaseAddress = new Uri(baseUrl);
var content = new FormUrlEncodedContent(new[]
{
new KeyValuePair("grant_type", "client_credentials"),
new KeyValuePair("client_id", clientId),
new KeyValuePair("client_secret", clientSecret),
new KeyValuePair("resource", resource)
});
var result = client.PostAsync(loginUrl, content).Result;
string resultContent = result.Content.ReadAsStringAsync().Result;
var json = JObject.Parse(resultContent);
accessToken = (string)json["access_token"];
}
var header = new AuthenticationHeaderValue("Bearer", accessToken);
var graphserviceClient = new GraphServiceClient(
new DelegateAuthenticationProvider(
(requestMessage) =>
{
requestMessage.Headers.Authorization = header;
return Task.FromResult(0);
}));
try
{
var users = await graphserviceClient.Users.Request().GetAsync();
var user = users.First();
}
catch (Microsoft.Graph.ServiceException servex)
{
Console.WriteLine(servex);
}