Microsoft Graph hat mit virtualEventWebinar eine neue Möglichkeit für die Auswertung von Webinare. Zum aktuellen Zeitpunkt inkludiert die API nur Lesemöglichkeiten. Die Möglichkeit kann ausreichend sein um Informationen über ein Webinar an externe Systeme zu übertragen.
Für virtualEventWebinar sind folgende Berechtigungen beachtenswert:
- Für die Auflistung von Webinare benötigt es eine App Registration. Die Auflistung aller Webinare unterstützt nur Application Permission.
- Mit Delegated Permission könnten Organisatoren ihre eigenen Webinare abfragen, sofern die ID des Webinars bekannt ist (siehe Beispiel im Verlauf).
- Für Application Permission ist in Teams zusätzlich eine Application Access Policy erforderlich. Mit der Policy wird eine App berechtigt für ausgewählte Konten Webinare auszuwerten.
Die Anforderungen und Vorgänge aus Microsoft Graph können zusammengefasst werden:
- App Registration wird in Teams mit neuer Application Access Policy verknüpft.
- Application Access Policy wird an ausgewählte Benutzerkonten zugewiesen.
- Über die Application Access Policy wird Graph berechtigt für die Benutzerkonten Webinare abzufragen. Für Microsoft Graph zählt welches Konto der Organisator ist.
Content
1) App Registration für Webinare
In Entra ID erstelle ich mir eine neue App Registration mit den Berechtigungen VirtualEvent.Read.All und lade mein Zertifikat zur Authentifizierung hoch. Für Webinare gibt es im Moment nur diese Berechtigung.
2) Application Access Policy in Teams konfigurieren
In den Graph Dokumentationen ist an div. Stellen eine Notiz über Application Access Policy vermerkt.
This API returns only webinars whose organizer has been assigned an application access policy.
Die Anleitung der Application Access Policy beschreibt den Vorgang.
Ich erstelle mir eine neue Application Access Policy und verknüpfe die Policy mit der Application ID der App Registration.
Import-Module MicrosoftTeams
Connect-MicrosoftTeams
$AppAccessPolicy = New-CsApplicationAccessPolicy -Identity "Webinar API Test" -AppIds "458636c5-d0b2-4efb-b9ac-371c18ad48ad"
Ich weise die Policy einer Entra ID Gruppe zu. Optional kannst du die Policy Benutzerkonten (User Assignment) oder allen Mitarbeitenden (Global Assignment) zuweisen, siehe Grant-CsApplicationAccessPolicy.
Grant-CsApplicationAccessPolicy -PolicyName $AppAccessPolicy.Identity -Group "8667cfc4-6c88-4c11-8b98-e716d840de68"
Die Aktivierung der Policy kann 30 Minuten dauern.
3) Webinare über Microsoft Graph auswerten
Nach der Vorbereitung sollten Webinare für berechtigte Konten über Graph verfügbar sein.
Import-Module Microsoft.Graph.Authentication
Connect-MgGraph -ClientId "<AppID>" -CertificateThumbprint "<CertificateThumbprint>" -TenantId "<TenantID"
$Url = "https://graph.microsoft.com/beta/solutions/virtualEvents/webinars"
$AllWebinars = Invoke-MgGraphRequest -Method GET -Uri $Url -ContentType "application/json"
$AllWebinars.value
Ich finde 16 Webinare. Es inkludiert verschiedene Testwebinare aus der Vergangenheit.
Pro Webinar inkludiert Graph Angaben über Name, Status, Audience, Datum, und andere Properties. Die verfügbaren Properties sind in der Dokumentation beschrieben.
4) Webinar über ID auswerten
In der Dokumentation beschreibt Microsoft ein Webinar über die Webinar ID auszuwerten. Die ID für ein Webinar zeigt Teams, wenn das Webinar in Teams im Web geöffnet und Manage Event ausgewählt wird.
In der Adressleiste zeigt es die ID 66412804-29c7-4570-b1de-5041a6ce30e0@ba304f99-a1c4-4b4c-827e-0d9f6063c05d. Mit der ID ist die Abfrage für ein einzelnes Webinar möglich.
Import-Module Microsoft.Graph.Authentication
Connect-MgGraph -ClientId "<AppID>" -CertificateThumbprint "<CertificateThumbprint>" -TenantId "<TenantID"
$Url = "https://graph.microsoft.com/beta/solutions/virtualEvents/webinars/66412804-29c7-4570-b1de-5041a6ce30e0@ba304f99-a1c4-4b4c-827e-0d9f6063c05d"
$Webinar = Invoke-MgGraphRequest -Method GET -Uri $Url -ContentType "application/json"
$Webinar
5) Application Access Policy von Benutzerkonto entfernen
Später kann in Teams die Zuweisung der Application Access Policy wieder entfernt werden. In meinem Beispiel entferne ich die Zuweisung an die Gruppe.
Grant-CsApplicationAccessPolicy -Group "8667cfc4-6c88-4c11-8b98-e716d840de68" -PolicyName $null
Nach der Anpassung inkludiert die Abfrage aus Abschnitt 3 keine Webinare mehr.