【问题标题】:Create a 'event as online meeting' or only the onlineMeeting using Microsoft Graph API使用 Microsoft Graph API 创建“在线会议活动”或仅在线会议
【发布时间】:2020-06-24 12:54:00
【问题描述】:

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

我们按照Build ASP.NET Core MVC apps with Microsoft GraphCreate and enable an event as an online meeting 创建了一个应用程序,该应用程序对组织的AD 用户 进行身份验证,并允许他将活动创建为在线会议。

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

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

我不知道如何做到这一点。

编辑

或者至少我怎么create onlineMeeting ?我尝试使用Client credentials provider 如下

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;

但它正在抛出

Code: Forbidden
Inner error:
    AdditionalData:
    request-id: <<some_id>>
    date: 2020-07-09T16:42:23
ClientRequestId: <<some_id>>

【问题讨论】:

标签: c# microsoft-graph-api microsoft-graph-teams


【解决方案1】:

我这几天一直在研究你的问题,我想提一下其他答案附带的一些建议。但除此之外,这里的主要挑战是,系统需要知道谁有权做什么。

所以 IMO 解决此问题的最佳选择是在 AzureAD 中创建访客登录,而不是您可以使用它来创建团队活动。此外,您还可以在访客用户登录后添加一个额外步骤,以便访客输入他/她的姓名并将其用作参考。

【讨论】:

  • 我使用用户访问令牌创建在线会议。我在回复中收到了加入网址。我需要代表用户从应用程序开始会议。如何使用用户访问令牌开始会议。请帮忙。
【解决方案2】:

您将需要采取这两个步骤。

  1. 获取正确的令牌
  2. Create an event(但将网址更改为 https://graph.microsoft.com/v1.0/users/the_user@domain.com/events)

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

  1. Use the client credentials flow 这将强制每个新租户的管理员为他们的组织授权您的应用程序。然后,您可以使用用户信息中的租户为该租户请求令牌,并使用用户 ID 创建正确的 url 以发布到。
  2. 让 IdentityServer 保存访问令牌并允许您访问它。在coonfiguration level,您可以访问令牌回调,您还可以在那里保存 Azure AD 访问令牌。我认为您可以将它添加到参考令牌中,这样它就不会每次都被传输,但您的 Web 应用程序仍然能够访问它。
  3. 使用 on-behalf-of 流,这将要求您将 IdentityServer 从 azure AD 检索到的 Azure AD 访问令牌令牌传递给您的应用程序。
  4. 只需从流中删除身份服务器,让您的 Web 应用程序直接使用 Azure AD 进行日志记录。这样一来,您就可以一直使用正确的令牌。

编辑

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

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

【讨论】:

  • 您的编辑正在谈论 Create onlineMeeting 端点,正如文档所述,这支持委派令牌(这意味着涉及用户的令牌,因此不可能客户端凭据)。
  • 我使用用户访问令牌创建了在线会议。我在回复中收到了加入网址。我需要代表用户从应用程序开始会议。如何使用用户访问令牌开始会议。请帮忙。
  • 评论不是新问题的地方。 @Gundamaiah
【解决方案3】:

要为“客户凭证”流程创建在线会议,我使用了以下内容:

 var confidentialClientApplication = ConfidentialClientApplicationBuilder
     .Create("my-app-client-id")
     .WithTenantId("my-aad-tenant-id")
     .WithClientSecret("my-client-secret")
     .Build();
    
 var authProvider = new ClientCredentialProvider(confidentialClientApplication);
    
 var graphClient = new GraphServiceClient(authProvider);
    
 var meetingGuid = Guid.NewGuid();
 var createMeetingResponse = await graphClient.Users["my-aad-user-object-id"].OnlineMeetings
     .CreateOrGet(meetingGuid.ToString())
     .Request()
     .PostAsync();

您的代码的问题是引用 graphClient.Me 会导致 Graph 请求转到 https://graph.microsoft.com/v1.0/me/onlineMeetings,这不是您在“客户端凭据”流中想要的。请参阅此处找到的文档中的此屏幕截图:https://docs.microsoft.com/en-us/graph/api/onlinemeeting-createorget?view=graph-rest-1.0&tabs=csharp

我必须在 Azure 门户中授予“应用程序”权限以允许我的应用程序访问在线会议 API,并且我必须创建一个客户端密码。我还必须按照本文创建策略并使用 Microsoft Teams PowerShell 将其授予特定用户:

https://docs.microsoft.com/en-us/graph/cloud-communication-online-meeting-application-access-policy

对于不在您组织中的用户,您可以邀请他们作为来宾用户加入您的租户。

由于 Windows 远程管理中的设置,我在使用 Microsoft Teams Powershell 命令时遇到了问题,我做了这样的事情来解决这个问题:

https://lonesysadmin.net/2017/08/10/fix-winrm-client-issues/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-27
    • 2017-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-10
    相关资源
    最近更新 更多