AAD 中按用户 ID 查找用户失败
User lookup by user id failed in AAD
我正在尝试在 .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);
}
但是,在 运行 上面的代码中,我收到以下错误。
Server error: User lookup by user id failed in AAD. Client exception:
Processing of the HTTP request resulted in an exception. Please see
the HTTP response returned by the 'Response' property of this
exception for details.
Inner error: AdditionalData: date: 2020-11-09T12:19:53 request-id:
02cd2168-d0d8-437a-9eee-117f1924a387 client-request-id:
02cd2168-d0d8-437a-9eee-117f1924a387 ClientRequestId:
02cd2168-d0d8-437a-9eee-117f1924a387
我们如何解决这个错误?
您已获得令牌作为应用程序,带有客户端凭据流。
这没有意义:
graphClient.Me.
“我”是谁?
通常,这是代表应用程序进行 API 调用的用户。
但是因为你获取了应用程序的令牌,所以没有用户。
您需要:
- 以用户身份获取令牌(不要使用客户端凭据)
- 使用不依赖于用户身份的 API(不确定 Teams 是否有)
@juusnas 的回答是正确的。我只是把我的评论整理在这里,方便大家参考。
您正在使用基于 Client credentials provider 的客户端凭据流。所以你应该使用 graphClient.Users["{user id/upn}"].OnlineMeetings.Request().AddAsync(onlineMeeting)
而不是 graphClient.Me.OnlineMeetings.Request().AddAsync(onlineMeeting)
.
而如果你想实现作为用户获取令牌,你应该选择Authorization code provider or Username/password provider。然后你可以继续使用 graphClient.Me.OnlineMeetings.Request().AddAsync(onlineMeeting)
.
权限错误,您需要在您的应用程序注册中添加应用权限(不是委托权限)OnlineMeetings.ReadWrite.All
。
并根据重要提示here, you also must create an application access policy允许应用程序代表用户访问在线会议。
我正在尝试在 .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);
}
但是,在 运行 上面的代码中,我收到以下错误。
Server error: User lookup by user id failed in AAD. Client exception: Processing of the HTTP request resulted in an exception. Please see the HTTP response returned by the 'Response' property of this exception for details.
Inner error: AdditionalData: date: 2020-11-09T12:19:53 request-id: 02cd2168-d0d8-437a-9eee-117f1924a387 client-request-id: 02cd2168-d0d8-437a-9eee-117f1924a387 ClientRequestId: 02cd2168-d0d8-437a-9eee-117f1924a387
我们如何解决这个错误?
您已获得令牌作为应用程序,带有客户端凭据流。 这没有意义:
graphClient.Me.
“我”是谁? 通常,这是代表应用程序进行 API 调用的用户。 但是因为你获取了应用程序的令牌,所以没有用户。
您需要:
- 以用户身份获取令牌(不要使用客户端凭据)
- 使用不依赖于用户身份的 API(不确定 Teams 是否有)
@juusnas 的回答是正确的。我只是把我的评论整理在这里,方便大家参考。
您正在使用基于 Client credentials provider 的客户端凭据流。所以你应该使用 graphClient.Users["{user id/upn}"].OnlineMeetings.Request().AddAsync(onlineMeeting)
而不是 graphClient.Me.OnlineMeetings.Request().AddAsync(onlineMeeting)
.
而如果你想实现作为用户获取令牌,你应该选择Authorization code provider or Username/password provider。然后你可以继续使用 graphClient.Me.OnlineMeetings.Request().AddAsync(onlineMeeting)
.
权限错误,您需要在您的应用程序注册中添加应用权限(不是委托权限)OnlineMeetings.ReadWrite.All
。
并根据重要提示here, you also must create an application access policy允许应用程序代表用户访问在线会议。