使用 Microsoft Graph API 创建“活动作为在线会议”或仅在线会议

Gop*_*opi 6 c# microsoft-graph-teams microsoft-graph-api

在特定租户下登录我们系统的任何用户(作为身份验证的身份服务器)都应该能够创建一个在线会议(MS Teams)活动。

我们遵循了使用 Microsoft GraphCreate构建 ASP.NET Core MVC 应用程序并启用事件作为在线会议来创建一个应用程序,该应用程序对组织AD 用户进行身份验证并允许他将事件创建为在线会议。

我们能够成功实施它,并且能够将活动创建为在线会议。

但这里的确切情况是,在我们的 Web 应用程序中通过身份验证的任何用户(不是 AD 用户)都应该能够创建 MS Teams 会议事件并与应该能够加入会议的其他参与者共享。

我不确定如何实现这一目标。

编辑

或者至少我如何创建 onlineMeeting?我尝试使用客户端凭据提供程序如下

IConfidentialClientApplication confidentialClientApplication = ConfidentialClientApplicationBuilder
    .Create("<<App_Id>>")
    .WithTenantId("<<Tenant_Id>>")
    .WithClientSecret("<<Client_Secret>>")
    .Build();


ClientCredentialProvider authenticationProvider = new ClientCredentialProvider(confidentialClientApplication);

GraphServiceClient graphClient = new GraphServiceClient(authenticationProvider);

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

var meeting = graphClient.Me.OnlineMeetings
.Request()
.AddAsync(onlineMeeting).Result;
Run Code Online (Sandbox Code Playgroud)

但它在扔

Code: Forbidden
Inner error:
    AdditionalData:
    request-id: <<some_id>>
    date: 2020-07-09T16:42:23
ClientRequestId: <<some_id>>
Run Code Online (Sandbox Code Playgroud)

Ste*_*han 1

您需要执行这两个步骤。

  1. 获取正确的令牌
  2. 创建一个事件(但将 url 更改为 https://graph.microsoft.com/v1.0/users/the_user@domain.com/events

困难的部分是获得正确的令牌,你有多种选择。

  1. 使用客户端凭据流程,这将强制每个新租户的管理员为其组织授权您的应用程序。然后,您可以使用用户信息中的租户来请求该租户的令牌,并使用用户 ID 创建要发布到的正确 URL。
  2. 让 IdentityServer 保存访问令牌并允许您访问它。在配置级别,您可以访问令牌回调,还可以保存 Azure AD 访问令牌。我认为您可以将其添加到引用令牌中,这样它就不会每次都传输,但您的网络应用程序仍然能够访问它。
  3. 使用代表流程,这将要求您传递由 IdentityServer 从 Azure AD 检索到的 Azure AD 访问令牌令牌,以传递到您的应用程序。
  4. 只需从流程中删除身份服务器,并让您的 Web 应用程序直接使用 Azure AD 进行日志记录。这样您就可以始终拥有正确的令牌。

编辑

阅读完您编辑的问题后,您想要一个网站,用户不必是您的 Azure AD 的成员,只需访问一些新的在线会议?

最好的选择是创建一个共享邮箱,授权一个应用程序(使用Calendar.ReadWrite)。获取带有客户端凭据的令牌并调用“创建事件”,然后从事件中提取会议 URL(当帖子成功完成时您将返回该 URL)。