在特定租户下登录到我们的系统(IdentityServer作为Auth)的任何用户都应该能够将活动创建为在线会议(MS小组)。
我们遵循Build ASP.NET Core MVC apps with Microsoft Graph和Create 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>>
答案 0 :(得分:3)
几天来我一直在处理您的问题,我想提一些其他答案附带的建议。但是除此之外,这是主要的挑战,系统需要知道谁有权执行操作。
因此IMO解决此问题的最佳选择是在AzureAD中创建访客登录,而不是您可以用来创建团队活动的登录。此外,您可以在访客用户登录后添加一个额外的步骤,以便访客应输入其姓名并将其用作参考。
答案 1 :(得分:1)
您需要执行以下两个步骤。
https://graph.microsoft.com/v1.0/users/the_user@domain.com/events
)困难的部分是获得正确的令牌,您有多种选择。
在阅读完已编辑的问题之后,您想要的是一个网站,用户不必是Azure AD的成员,而只想访问一些新的在线会议?
最佳选择是创建一个共享邮箱,授权一个应用程序(使用Calendar.ReadWrite)。获取具有客户凭证的令牌,然后调用Create Event,然后从事件中提取会议URL(发布成功完成后,您将获得回执。
答案 2 :(得分:0)
要为“客户凭据”流程创建在线会议,我使用了以下内容:
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
会导致图表请求转到 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/