【问题标题】:User lookup by user id failed in AAD在 AAD 中按用户 ID 查找用户失败
【发布时间】:2020-11-09 12:29:02
【问题描述】:

我正在尝试在 .NET 核心应用程序中使用 Microsoft.Graph.Beta SDK 创建 MS Teams 会议。我正在使用以下代码来创建会议。

 static void Main(string[] args)
        {
            var clientId = "<Enter you Client ID here>";
            var tenantId = "<Enter your tenand ID here>";
            var clientSecret = "<Enter your client secret here>";
            var scopes = new string[] { "https://graph.microsoft.com/.default" };

            ///The client credential flow enables service applications to run without user interaction. 
            ///Access is based on the identity of the application.
            IConfidentialClientApplication confidentialClientApplication = ConfidentialClientApplicationBuilder
            .Create(clientId)
            .WithTenantId(tenantId)
            .WithClientSecret(clientSecret)
            .Build();

            ClientCredentialProvider authProvider = new ClientCredentialProvider(confidentialClientApplication);



            var onlinemeeting = CreateTeamsMeeting(authProvider).GetAwaiter().GetResult();


            Console.ReadLine();
        }


        public static async Task<OnlineMeeting> CreateTeamsMeeting(IAuthenticationProvider authProvider)
        {
            GraphServiceClient graphClient = new GraphServiceClient(authProvider);

            var onlineMeeting = new OnlineMeeting
            {
                StartDateTime = DateTimeOffset.Parse("2020-11-12T21:30:34.2444915+00:00"),
                EndDateTime = DateTimeOffset.Parse("2020-11-12T22:00:34.2464912+00:00"),
                Subject = "User Token Meeting",
            };

            return await graphClient.Me.OnlineMeetings
                .Request()
                .AddAsync(onlineMeeting);
        }

但是,在运行上述代码时,我收到以下错误。

服务器错误:在 AAD 中按用户 ID 查找用户失败。客户端异常: 处理 HTTP 请求导致异常。请参见 由 this 的 'Response' 属性返回的 HTTP 响应 详情例外。

内部错误:AdditionalData:日期:2020-11-09T12:19:53 request-id: 02cd2168-d0d8-437a-9eee-117f1924a387 客户端请求 ID: 02cd2168-d0d8-437a-9eee-117f1924a387 ClientRequestId: 02cd2168-d0d8-437a-9eee-117f1924a387

我们如何解决这个错误??

【问题讨论】:

  • 您正在使用基于Client credentials provider 的客户端凭据流。所以你应该使用graphClient.Users["{user id/upn}"].OnlineMeetings.Request().AddAsync(onlineMeeting) 而不是graphClient.Me.OnlineMeetings.Request().AddAsync(onlineMeeting)
  • 而如果你想实现以用户身份获取token,你应该选择Authorization code providerUsername/password provider。然后你可以继续使用graphClient.Me.OnlineMeetings.Request().AddAsync(onlineMeeting)
  • 嗨,感谢@AllenWu 分享答案。这很有帮助。我试过你的方法。但是下面的错误来了。 “应用程序无权代表此用户创建在线会议。”如果您能分享您对此的想法,将不胜感激。谢谢。
  • 已添加答案。如果任何答案有帮助,您可以将其标记为已接受。谢谢。

标签: c# azure microsoft-graph-api microsoft-graph-sdks microsoft-graph-teams


【解决方案1】:

@juusnas 的回答是正确的。我只是在这里整理我的 cmets 以方便参考。

您正在使用基于Client credentials provider 的客户端凭据流。所以你应该使用graphClient.Users["{user id/upn}"].OnlineMeetings.Request().AddAsync(onlineMeeting) 而不是graphClient.Me.OnlineMeetings.Request().AddAsync(onlineMeeting)

如果你想实现以用户身份获取令牌,你应该选择Authorization code providerUsername/password provider。然后你可以继续使用graphClient.Me.OnlineMeetings.Request().AddAsync(onlineMeeting)

对于权限错误,您需要在您的应用注册中添加应用权限(非委托权限)OnlineMeetings.ReadWrite.All

根据重要提示here,您还必须create an application access policy 允许应用程序代表用户访问在线会议。

【讨论】:

    【解决方案2】:

    您已获得一个令牌作为应用程序,带有客户端凭据流。 这没有意义:

    graphClient.Me.
    

    “我”是谁? 通常这是代表应用程序进行 API 调用的用户。 但是因为你是作为应用获取token的,所以没有用户。

    您需要:

    1. 以用户身份获取令牌(不要使用客户端凭据)
    2. 使用不依赖于用户身份的 API(不确定 Teams 是否有这些)

    【讨论】:

    • 嗨@juunas 感谢分享答案。虽然我是 MS Graph SDK 的新手,但你说的很有道理。我需要有关如何以用户身份获取令牌以及如何执行命令的更多信息。由于 graphClient.Me. 不是我应该遵循的方法,我们是否有任何我可以查看的代码 sn-p ?谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-16
    • 2020-08-21
    • 1970-01-01
    • 2016-09-25
    • 1970-01-01
    • 2021-12-26
    • 2021-10-23
    相关资源
    最近更新 更多