Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法使用GraphServiceClient创建具有应用程序标识的联机会议_C#_Azure_Microsoft Graph Api_Microsoft Graph Teams - Fatal编程技术网

C# 无法使用GraphServiceClient创建具有应用程序标识的联机会议

C# 无法使用GraphServiceClient创建具有应用程序标识的联机会议,c#,azure,microsoft-graph-api,microsoft-graph-teams,C#,Azure,Microsoft Graph Api,Microsoft Graph Teams,我使用Azure AD中的应用程序标识,并授予读写权限,我还运行了Grant CsApplicationAccessPolicy,以便应用程序标识有权代表Azure AD中的真实用户标识创建在线会议 我知道我的设置与graph api中的get user一起工作。但是,在运行以下操作后,我遇到了错误: var confidentialClient = ConfidentialClientApplicationBuilder .Create(

我使用Azure AD中的应用程序标识,并授予读写权限,我还运行了Grant CsApplicationAccessPolicy,以便应用程序标识有权代表Azure AD中的真实用户标识创建在线会议

我知道我的设置与graph api中的get user一起工作。但是,在运行以下操作后,我遇到了错误:

            var confidentialClient = ConfidentialClientApplicationBuilder
                .Create(clientId)
                .WithAuthority($"https://login.microsoftonline.com/{tenantId}/v2.0")
                .WithClientSecret(clientSecret)
                .Build();

            GraphServiceClient graphServiceClient =
                new GraphServiceClient("https://graph.microsoft.com/beta", new DelegateAuthenticationProvider(async (requestMessage) =>
                {

                        var authResult = await confidentialClient
                            .AcquireTokenForClient(scopes)
                            .ExecuteAsync();

                        requestMessage.Headers.Authorization =
                            new AuthenticationHeaderValue("Bearer", authResult.AccessToken);
                })
                    );

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

                var meetingInstance = await graphServiceClient.Me.OnlineMeetings
                    .Request()
                    .AddAsync(onlineMeeting);
错误消息如下所示,为什么会说在AAD中按用户id查找用户失败

状态:未找到(404) 操作ID:8d06ff01-1dc3-49d1-9ced-9db6a919b162

客户关联ID:53b4478e-ba86-48ca-bb5b-25e5ef50c187

服务器错误:在AAD中按用户id查找用户失败

客户端异常:HTTP请求的处理导致异常。有关详细信息,请参阅此异常的“response”属性返回的HTTP响应

内部错误:

其他数据:

日期:2020-12-16T21:08:31

请求id:d60858cf-5ef5-4a0d-8d67-181f80ed6c35

客户请求id:d60858cf-5ef5-4a0d-8d67-181f80ed6c35

客户问题ID:d60858cf-5ef5-4a0d-8d67-181f80ed6c35

位于Microsoft.Graph.HttpProvider.SendAsync(HttpRequestMessage请求、HttpCompletionOption completionOption、CancellationToken CancellationToken) 位于Microsoft.Graph.BaseRequest.SendRequestAsync(对象serializableObject、CancellationToken CancellationToken、HttpCompletionOption completionOption) 在Microsoft.Graph.BaseRequest.SendAsync[T](对象serializableObject,CancellationToken CancellationToken,HttpCompletionOption completionOption) 在D:\VSTS\MSTeam\MSTeam\MSTeam\MSTeam\Program.cs中的MSTeam.Program.Main(字符串[]args)处:第62行是正确的

基于此:

使用应用程序令牌时请求:
POST/users/{userId}/onlineMeetings

因此,您应该在此处使用
graphServiceClient.Users[“{userId}”].OnlineMeetings
而不是
graphServiceClient.Me.OnlineMeetings

userId
是用户的对象ID。当您选择时,您需要将策略授予用户:

Grant-CsApplicationAccessPolicy -PolicyName Test-policy -Identity "ddb80e06-92f3-4978-bc22-a0eee85e6a9e"
ddb80e06-92f3-4978-bc22-a0eee85e6a9e
正是
userId

我的代码供您参考:

        // Configure the MSAL client as a confidential client
        var confidentialClient = ConfidentialClientApplicationBuilder
            .Create("{client_id}")
            .WithTenantId("{tenant_id}")
            .WithClientSecret("{client_secret}")
            .Build();

        ClientCredentialProvider authProvider = new ClientCredentialProvider(confidentialClient);

        GraphServiceClient graphServiceClient = new GraphServiceClient(authProvider);

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

        var meeting = await graphServiceClient.Users["{userId}"].OnlineMeetings
            .Request()
            .AddAsync(onlineMeeting);

当您尝试使用应用程序标识时,那么为什么要将其称为“我”,这表示委派标识。您应该使用“”api调用,它将对您起作用。我应该在其中输入什么用户id?我认为当我创建graphServiceClient时,我已经传递了应用程序标识的客户机id和客户机机密,这样它就可以从应用程序标识中知道它。我已经在上面更新了如何实例化graph客户端。如果我的答案对您有帮助,您可以接受它作为答案。这可能对其他社区成员有益。谢谢你,谢谢你,很有效!