C# 在AAD中按用户id查找用户失败

C# 在AAD中按用户id查找用户失败,c#,azure,microsoft-graph-api,microsoft-graph-sdks,microsoft-graph-teams,C#,Azure,Microsoft Graph Api,Microsoft Graph Sdks,Microsoft Graph Teams,我正在尝试在.NET核心应用程序中使用Microsoft.Graph.Beta SDK创建MS团队会议。我正在使用以下代码创建会议 static void Main(string[] args) { var clientId = "<Enter you Client ID here>"; var tenantId = "<Enter your tenand ID here>&q

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

 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);
        }
static void Main(字符串[]args)
{
var clientId=“”;
var tenantId=“”;
var clientSecret=“”;
变量范围=新字符串[]{”https://graph.microsoft.com/.default" };
///客户端凭据流使服务应用程序能够在没有用户交互的情况下运行。
///访问基于应用程序的标识。
IConfidentialClientApplication-secretentialclientapplication=secretentialclientapplicationbuilder
.Create(clientId)
.WithTenantId(tenantId)
.WithClientSecret(clientSecret)
.Build();
ClientCredentialProvider authProvider=新的ClientCredentialProvider(机密客户端应用程序);
var onlinemeeting=CreateTeamsMeeting(authProvider).GetAwaiter().GetResult();
Console.ReadLine();
}
公共静态异步任务CreateTeamsMeeting(IAAuthenticationProvider authProvider)
{
GraphServiceClient graphClient=新的GraphServiceClient(authProvider);
var onlineMeeting=新的onlineMeeting
{
StartDateTime=DateTimeOffset.Parse(“2020-11-12T21:30:34.2444915+00:00”),
EndDateTime=DateTimeOffset.Parse(“2020-11-12T22:00:34.2464912+00:00”),
Subject=“用户令牌会议”,
};
返回等待graphClient.Me.Online会议
.Request()
.AddAsync(在线会议);
}
但是,在运行上述代码时,我收到以下错误

服务器错误:在AAD中按用户id查找用户失败。客户端异常: HTTP请求的处理导致异常。请看 此属性的“response”属性返回的HTTP响应 细节例外

内部错误:附加数据:日期:2020-11-09T12:19:53请求id: 02cd2168-d0d8-437a-9eee-117f1924a387客户请求id: 02cd2168-d0d8-437a-9eee-117f1924a387客户问题: 02cd2168-d0d8-437a-9eee-117f1924a387


如何修复此错误???

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

graphClient.Me.
“我”是谁? 通常,这是代表应用程序进行API调用的用户。 但由于您作为应用程序获取了令牌,因此没有用户

您需要:

  • 以用户身份获取令牌(不要使用客户端凭据)
  • 使用不依赖于用户身份的API(不确定团队是否拥有这些API)

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

    graphClient.Me.
    
    “我”是谁? 通常,这是代表应用程序进行API调用的用户。 但由于您作为应用程序获取了令牌,因此没有用户

    您需要:

  • 以用户身份获取令牌(不要使用客户端凭据)
  • 使用不依赖于用户身份的API(不确定团队是否拥有这些API)

  • @朱纳斯的回答是正确的。我只是把我的评论整理在这里以便于参考


    您正在使用基于的客户端凭据流。因此,您应该使用
    graphClient.Users[“{user id/upn}”].OnlineMeetings.Request().AddAsync(onlineMeeting)
    而不是
    graphClient.Me.OnlineMeetings.Request().AddAsync(onlineMeeting)


    如果要实现以用户身份获取令牌,则应选择或。然后您可以继续使用
    graphClient.Me.OnlineMeetings.Request().AddAsync(onlineMeeting)

    对于权限错误,您需要将应用程序权限(非授权权限)
    OnlineMeetings.ReadWrite.All
    添加到您的应用程序注册中


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

    @juusnas的答案是正确的。我只是把我的评论整理在这里以便于参考


    您正在使用基于的客户端凭据流。因此,您应该使用
    graphClient.Users[“{user id/upn}”].OnlineMeetings.Request().AddAsync(onlineMeeting)
    而不是
    graphClient.Me.OnlineMeetings.Request().AddAsync(onlineMeeting)


    如果要实现以用户身份获取令牌,则应选择或。然后您可以继续使用
    graphClient.Me.OnlineMeetings.Request().AddAsync(onlineMeeting)

    对于权限错误,您需要将应用程序权限(非授权权限)
    OnlineMeetings.ReadWrite.All
    添加到您的应用程序注册中


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

    Hi@juunas感谢分享答案。虽然我是MS Graph SDK的新手,但你说的很有道理。我需要更多关于如何作为用户获取令牌以及如何执行命令的信息。既然graphClient.Me.不是我应该遵循的方法,那么我们有没有可以研究的代码片段?谢谢你hi@juunas谢谢你分享答案。虽然我是MS Graph SDK的新手,但你说的很有道理。我需要更多关于如何作为用户获取令牌以及如何执行命令的信息。既然graphClient.Me.不是我应该遵循的方法,那么我们有没有可以研究的代码片段?感谢您使用基于的客户端凭据流。因此,您应该使用
    graphClient.Users[“{user id/upn}”].OnlineMeetings.Request().AddAsync(onlineMeeting)
    ,而不是
    graphClient.Me.OnlineMeetings.Request().AddAsync(onlineMeeting)
    。如果您想实现作为用户获取令牌,应该选择或。然后您可以继续使用
    graphClient.Me.OnlineMeetings.Request().AddAsync(onlineMeeti