当前位置: 首页 > 知识库问答 >
问题:

尝试调用Microsoft Graph客户端时的InvalidAuthenticationToken

丘友樵
2023-03-14

我正在遵循GitHub上的Microsoft Graph repository提供的一个示例。其中,它描述了使用需要访问令牌的DelegateAuthenticationProvider。Marc Lafleur的auth流入门指定了一种获取访问令牌的方法,我结合了使服务-服务身份验证工作的指导。

尽管我收到了一个似乎有效的访问令牌,但当我通过graph客户端发出命令时,我会从Microsoft graph获得一个ServiceException,

这是我提出的代码:

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);
}

共有1个答案

丌官霖
2023-03-14

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

var resource = "https://graph.microsoft.com/";
 类似资料:
  • 实时调试模块提供埋点的审计功能,主要应用于以下两个业务场景: 测试或者产品需要校验埋点是否跟业务场景一致: 埋点是否埋上:当前业务流程或者位置是否有埋点。==避免漏埋== 埋点是否准确:当前埋点是否跟业务流程或者位置一致,关键信息是否上报。==避免埋点错误== 测试或者开发需要校验埋点,但是又不希望当前操作产生错误日志污染线上数据 实时调试功能目前支iOS、Android以及微信小程序,本节介绍客

  • 通过 DBGp 可以支持调试功能,DGBp 是一种常见的支持多语言和调试器 UI 通信的调试器协议。请参阅交互式调试了解更多细节。在这个页面中列出了一些与 AutoHotkey 兼容的 UI 或“客户端”。 SciTE4AutoHotkey SciTE4AutoHotkey 是一个免费的基于 SciTE 的 AutoHotkey 脚本编辑器. 除了 DBGp 支持, 它还为 AutoHotkey

  • 实验调试功能面向策划、交互、视觉、测试以及开发同学,定位于解决以下问题: 提前对不同版本的移动端实验进行调试,保证HubbleData可以对不同版本进行分流,同时检查线上效果是否跟预期相符; 提前对设置的优化指标进行调试,保证HubbleData可以正常统计A/B测试相关的优化指标,保证埋点数据是准确的。 本节将对移动端实验的调试功能进行详细介绍,内容包括产品功能介绍,使用流程以及一些注意事项。

  • 为能够用集成的调试软件包调试MySQL客户端 ,你应该用--with-debug或--with-debug=full配置MySQL。请参阅2.8.2节,“典型的配置选项”。 在运行客户端之前,你应该设置 MYSQL_DEBUG环境变量: shell> MYSQL_DEBUG=d:t:O,/tmp/client.traceshell> export MYSQL_DEBUG 这会导致客户端在 /tmp

  • 我已经为一个服务实现了socket.io,然后删除了它。但是,我仍然有客户机向endpoint/socket.io发出初始连接请求,而endpoint/socket.io已经不存在了。使用各种http状态代码进行响应似乎并不重要。 是否有方法阻止客户端尝试连接?我每分钟收到几千个请求。

  • 差不多吧。是否有一个属性,一些配置,一些设置,可以帮助做到这一点很容易请?不用添加太多锅炉代码。 谢谢。