C# 在AAD中按用户id查找用户失败
我正在尝试在.NET核心应用程序中使用Microsoft.Graph.Beta SDK创建MS团队会议。我正在使用以下代码创建会议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
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调用的用户。
但由于您作为应用程序获取了令牌,因此没有用户
您需要:
您已获得一个令牌作为应用程序,并具有客户端凭据流。 这没有意义:
graphClient.Me.
“我”是谁?
通常,这是代表应用程序进行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