【问题标题】:InvalidAuthenticationToken when trying to invoke Microsoft Graph client尝试调用 Microsoft Graph 客户端时的 InvalidAuthenticationToken
【发布时间】:2016-11-11 08:04:14
【问题描述】:

我正在关注 Microsoft Graph repository on github 提供的示例。在其中,它描述了使用需要访问令牌的 DelegateAuthenticationProvider。 Marc LaFleur 的primer on auth flow 指定了一种获取访问令牌的方法,我结合guidance 使服务-服务身份验证工作。

即使我收到了似乎是有效的访问令牌,当我通过图形客户端发出命令时,我从 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<string, string>("grant_type", "client_credentials"),
        new KeyValuePair<string, string>("client_id", clientId),
        new KeyValuePair<string, string>("client_secret", clientSecret),
        new KeyValuePair<string, string>("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);
}

【问题讨论】:

    标签: microsoft-graph-api


    【解决方案1】:

    您将资源设置为指向您的网站,但它应该指向您希望访问的外部网络资源。试试这个:

    var resource = "https://graph.microsoft.com/";
    

    【讨论】:

    • 谢谢你,但现在我在我的异常中得到了这个,“无法建立调用应用程序的身份。”对于返回的 accessToken,似乎没问题,因为它包含正在验证的应用程序的名称。
    • 我能够在 Postman 中重现该问题,但无法在正确 URL 下注册的应用程序中重现。我会仔细检查您的注册信息,尤其是您注册的 URL。您是否在 apps.dev.microsoft.com 门户或 Azure AD 中注册?我还会确保您的权限设置正确。至少应设置 Microsoft Graph 和 Windows Azure 服务管理。
    猜你喜欢
    • 2018-04-11
    • 1970-01-01
    • 1970-01-01
    • 2022-11-13
    • 1970-01-01
    • 1970-01-01
    • 2020-12-25
    • 1970-01-01
    • 2018-08-10
    相关资源
    最近更新 更多