Blog

Technische Informationen rund um das Thema Modernes Arbeiten

Seite 2 von 6

Plan for Skype for Business in VDI environments

Auch wenn Microsoft Teams immer stärker in den Vordergrund rückt, kommen doch immer wieder Fragen zu Skype for Business… In diesem Fall war es die Frage nach Betrieb von Skype for Business in einer VDI – Umgebung. Daher greife ich das Thema gerne noch einmal auf und verweise auf das zentrale Whitepaper zum Thema.

Dort stellt Microsoft eigentlich 3 Wege vor, die genutzt werden können:

  • Lync VDI plug-in: für die Client – Versionen Lync 2013 und Skype for Business 2015 in einer VDI – Umgebung.
  • Citrix RealTime Optimization Pack: hierbei handelt es sich Plug-In, das mit Citrix zusammen entwickelt wurde und für Lync 2013 oder Skype for Business 2016 Clients verfügbar ist. 

It consists of two components: the RealTime Connector (which is installed on the virtual desktop) and the RealTime Media Engine (which is installed on the end user’s local machine). These two components allow the user’s local computer to use the Skype for Business client running on the virtual desktop with the A/V processing moved to the local computer. For Citrix-based virtual desktop environments, the Citrix RealTime Optimization Pack is recommended, and further support is planned. […]

The Citrix RealTime Optimization Pack does support Office 365. For Citrix-based virtual environments, review Citrix’s Technical Overview documentation for the list of supported features and versions.

Skype for Business Basic Clients werden weder in der Citrix noch von der VMWare – Lösung unterstützt. 

 

Related Links

FindTime – schon lange da, aber selten genutzt

Termine zu finden, an denen mehrere Kollegen beteiligt sind, ist  häufig eine Herausforderung. FindTime  (das bereits seit mehreren Jahren im Office Store ist), bietet hier unter Office 365 eine sehr einfache Möglichkeit, Termine zu vereinbaren. Man sucht nicht mehr einen Termin, der für alle passt, sondern schlägt mehrere Termine vor und die Teilnehmer können dann auf die einzelnen Terminvorschläge bewerten. Der Vorschlag mit den meisten Teilnehmern kann dann direkt in einen Termin umgewandelt werden. 

FindTime finden Sie in Outlook im Menüband. Je nach Version gibt es unterschiedliche Bezeichnungen wie Add-Ins abrufen  oder Store:

Nach der Installation finden Sie einen neuen Eintrag im Menüband der Mails oder eines Termins:

Beim ersten Start öffnet sich der Welcome-Bereich. Über Link now können sie die Verbindung zwischen Ihrem Benutzer und FindTime herstellen.

Klicken Sie einfach auf den Button Link now:

Sie kommen zur Anmeldeseite, auf der Sie das Passwort für Ihren Benutzer angeben.

Danach werden Sie in einen Kalender geführt, in dem Tage und Zeitslots aufgeführt sind. Die Teilnehmer werden farblich (grün, gelb oder rot) danach markiert wie hoch die Wahrscheinlichkeit ist, dass der Benutzer an der Besprechung zu dem gewählten Termin teilnehmen kann. 

Wählen Sie durch Anklicken der Tage + Termine entsprechende Termine, die Sie an die Teilnehmer kommunizieren möchten.

Nach einem Klick auf Next werden die Terminvorschläge als “You are invited to a meeting” in eine Mail gepackt, die bereits als Empfänger die Personen aufführt, die zum Termin eingeladen werden sollten. 

Ein Klick auf den Button Select options innerhalb der Mail für auf eine Website, über die Sie abstimmen können, wie die einzelnen vorgeschlagenen Termine passen.

Als Teilnehmer können Sie somit dem Organisator mitteilen: Termin ginge, Termin geht nicht oder dieser Termin passt super gut und wäre mein “Favorit”. Die Einträge der Kollegen – soweit sie schon abgestimmt haben – werden neben den Abstimmungsbuttons angezeigt. Das kann bei der Entscheidung, einen Termin anzunehmen oder abzulehnen durchaus hilfreich sein. Passt keiner der Termine, kann man einen Alternativtermin eintragen.

Sie können jederzeit nach dem Klick auf Submit noch einmal auf die Site zurückkehren und ihre Eingaben ändern. 

Haben alle abgestimmt, kann der Organisator mit einem Klick auf Schedule den Termin dann entsprechend ansetzen. 

Für den Organisator spannend: die Auswahltermine werden schon einmal als Blocker im Kalender eingetragen und verhindern so, dass die Terminoptionen versehentlich überschrieben werden.

Ein Blick in die FAQs am Ende der FindTime – Website beantwortet eine wichtige Frage: 

Can I send invites to people who don’t use Office 365?

Yes! You can send a FindTime invite to anyone with an email address. Only organizers are required to be on Office 365.

Deployment Guide for OneNote

Mit den neuesten Versionen von Microsoft Office hat sich ein entscheidender Punkt geändert: die Desktopversion von OneNote ist nicht mehr Bestandteil des Produktpaketes. Der Artikel von Microsoft beschäftigt sich mit den unterschiedlichen Lösungen und den damit verbundenen Installationswegen. 

There are two Windows versions of OneNote that IT Pros can deploy to users in their organizations: OneNote 2016 and OneNote for Windows 10. Currently, OneNote 2016 is installed by default when you deploy Office 365 ProPlus, or when you deploy a volume licensed version of Office 2016, such as Office Standard 2016. OneNote for Windows 10 is installed by default on computers running Windows 10 or users can install it directly from the Microsoft Store.

But, in the next several months, the following changes are coming to OneNote for new Office deployments:

  • If you’re deploying Office 365 ProPlus on a computer running Windows 10, OneNote 2016 will no longer be installed by default when you’re installing Office 365 ProPlus from the Office 365 portal or by using System Center Configuration Manager (Current Branch). OneNote for Windows 10 will be the default OneNote experience.
  • If you’re deploying Office 2019, OneNote for Windows 10 will be the default OneNote experience.

Das bedeutet, dass man nach einer Neuinstallation auf z. B. Windows 10 OneNote 2016 separat installieren muss. Wichtig ist dabei die Anmerkung im Text: 

Keep in mind that OneNote 2016 is no longer being updated with new features and there won’t be a OneNote 2019. OneNote 2016 will continue to receive other updates, like critical fixes and security updates, while it’s still supported. Mainstream support for OneNote 2016 ends in October 2020, and extended support ends in October 2025.

Der Artikel beschäftigt sich dann mit den verschiedenen verbleibenden Optionen:

  • How to deploy OneNote 2016 (z. B. über das OCT)
  • How to deploy OneNote for Windows 10
  • When does OneNote for Windows 10 become the default version that’s installed
  • Additional information about deploying OneNote

Related Links:

Bereitstellen von Microsoft Teams mit Office 365 ProPlus

Bereits seit einiger Zeit gibt es immer wieder Hinweise, dass Microsoft Teams direkt mit Office 365 ProPlus ausgerollt werden wird. Bereits dieser Roadmap-Eintrag führte zu Diskussionen. Nun steht auch ein ausführlicher Artikel (veröffentlicht zum 24.04.2019) zum Thema zur Verfügung.

Currently, Microsoft Teams is a separate installation from Office 365 ProPlus. But, starting in late February 2019, Teams will be installed by default for new installations of Office 365 ProPlus, starting with Version 1902 in Monthly Channel. If Teams is already installed on the device, no changes are made to that installation of Teams.

Damit müssen sich nun auch Firmen, die eine Einführung von Microsoft Teams noch nicht geplant hatten, mit dem Thema zumindest auseinandersetzen. Sobald der Client auf dem Rechner des Mitarbeiters ankommt, werden sich die Mitarbeiter das Tool auch genauer ansehen (so das noch nicht geschehen ist). 

Der Artikel liefert auch eine Liste, ab wann die Änderung in welchem Channel greifen wird.

Wichtig ist sicher der Abschnitt:

  • How to exclude Microsoft Teams from being installed by default on devices running Windows

Danach geht der Artikel noch auf die Frage ein, was passiert, wenn eine Office Installation bereits auf dem Rechner vorliegt, aber ein neues Setup ausgeführt wird. 

  • To exclude Teams from being installed in these cases, you need to include the ExcludeApp element for each product that’s already installed as well as any products you’re installing. But, you don’t need to include the ExcludeApp element in the section of your configuration.xml file where you specify language packs or proofing tools.
  • This is a known issue with the installation process that currently requires including the ExcludeApp element for Teams in multiple places in the configuration.xml file. We’re working on a fix for this issue so that repeating the ExcludeApp element for Teams in several places won’t be necessary. We’ll update this article when this known issue has been fixed.

Related Links:

Microsoft Teams for Virtualized Desktop Infrastructure

Der Betrieb von Microsoft Teams in einer Virtualized Desktop Infrastruktur ist mit Sicherheit eine Anforderung, die häufiger auftritt. Dieser Artikel von April 2019 gibt einen Einblick über die Einsatzmöglichkeiten von Microsoft Teams in dieser Umgebung.

Ein erster Teil beschäftigt sich mit den Anforderungen und Einschränkungen von Microsoft Teams in einer Virtualized Desktop Infrastruktur.

  • Teams requirements
    The Teams calling and meeting experience isn’t optimized for a VDI environment (coming soon). We recommend you set user-level policies to turn off calling and meeting functionality in Teams. You can still choose to run Teams fully in VDI using either the Teams desktop app or web app. However, we recommend that you set the policies to avoid compromising the user experience.

Anschließend geht der Artikel auf die Installation von Microsoft Teams in einer Virtualize Desktop Infrastruktur ein

  • Install Teams on VDI
    […] The next interactive logon session starts Teams and asks for credentials. Note that it’s not possible to disable auto-launch of Teams when installing Teams on VDI using the ALLUSER property.

Der Artikel schließt mit 

  •  Known issues and limitations
    • Shared session host type deployments
    • Calling and meetings
    • Joining calls and meetings created by other users
    • Cached content
    • Client updates
    • User experience

Overview of shared computer activation for Office 365 ProPlus

In der Regel können Nutzer Office 365 Pro Plus nur auf einer begrenzten Anzahl von Geräten installieren und aktivieren (5 PCs, 5 mobile Devices etc.). Dies hilft aber in vielen Fällen nicht, bei denen Computer von mehreren Mitarbeitern parallel genutzt werden.

Mit “shared computer activation” gibt es eine Lösung, die in Szenarien hilft, in denen sich mehrere Benutzer am gleichen Computer anmelden. Die Nutzer können jeweils Office-Programme wie Word oder Excel gleichzeitig auf dem Computer ausführen. 

Hier einige Beispiele (aus dem Artikel), bei denen shared Computer activation nützlich sein kann:

  • Three workers at a factory share a computer, each worker using Office on that computer during their eight-hour shift.
  • Fifteen nurses at a hospital use Office on ten different computers throughout the day.
  • Five employees connect remotely to the same computer to run Office.
  • Multiple employees use Office on a computer that’s located in a conference room or some other public space in the company.

Der Artikel zeigt, wie shared computer activation funktioniert und eingerichtet wird.

  • How to enable shared computer activation for Office 365 ProPlus
  • How shared computer activation works for Office 365 ProPlus
  • Additional details about shared computer activation for Office 365 ProPlus

Darunter finden Sie auch noch weiterführende Links rund um das Thema Aktivierung von Office 365 ProPlus:

Microsoft Teams IT architecture posters

Immer sehr hilfreich ist es, wenn Microsoft technische Poster veröffentlicht, welche die Zusammenhänge eines Produktes näher erklären. Mit den Microsoft Teams IT architecture poster ist nun auch für Microsoft Teams ein PDF verfügbar, das 

 

End of life program for the integration of Skype for Business with third-party audio conferencing providers

Bereits seit längerer Zeit hat Microsoft das Ende des ACP Programms (audio conferencing providers) angekündigt. Das Programm läuft noch bis zum 1. April 2020. Es gelten folgende Einschränkungen: 

  • Kunden, die bisher keine Benutzer für die Benutzung eines ACP-Dienstes eines Drittanbieters konfiguriert haben, können die Konfiguration nicht mehr vornehmen.
  • Kunden, welche die Nutzung eines ACP-Dienstes für ihre Benutzer konfiguriert haben, können diese Dienste noch bis zum 01.04.2020 nutzen. Es können neue Benutzer zu diesem Dienst hinzufügt werden. Das wird allerdings nicht empfohlen.

Ab dem 01.04.2020 gelten folgende Regeln:

  • Benutzer, die an einem Skype for Business Meeting über die durch einen ACP Dienst zur Verfügung gestellten Einwahlnummer nutzen wollen, werden nicht mehr mit einer Konferenz verbunden.
  • Einwahlnummern für einen ACP – Dienst werden nicht mehr automatisch in eine Skype for Business Einladung eingeblendet.

Unter den nachfolgend aufgeführten Links finden Sie weiterführende Informationen:

 

Admin- und Benutzer-Trainings Microsoft Teams

Inzwischen hat sich Microsoft Teams zu einem Tool entwickelt, das eine zentrale Rolle in der Microsoft Welt entwickelt.

Wer sich aus technischer Sicht mit Microsoft Teams beschäftigen will und einen Einstieg in die Administration / Planung von Teams sucht, findet hier einen guten Ausgangspunkt.

Admin Training für Microsoft Teams

Auch für Endanwender gibt es hier (englische) Trainings mit vielen Hinweisen.

Einführungen für Anwender

Auf Youtube findet sich ein eigener Teams-Channel, der darüber hinaus eine Fülle von kurzen Videos zu den unterschiedlichsten Themen rund um Microsoft Teams enthält.

Benutzer mit Hilfe von Microsoft Graph finden

Wie in den Artikeln über MS Graph schon beschrieben, kann man damit auf vielfältigste Informationen aus der Microsoft Cloud zugreifen. 

Hierzu gibt es wichtige Voraussetzungen:

  • Die Applikation, die auf die Informationen zugreift, muss registriert sein. 
  • Die Applikation muss die richtigen Zugriffsberechtigungen haben.

Registrieren der Anwendung in Azure AD

Während man im Internet noch viele Einträge findet, dass die Applikation über das App-Registrierungsportal registrieren soll, hat sich für mich der Weg direkt aus https://portal.azure.com heraus als der bequemere Weg erwiesen. Für diejenigen, die es jedoch auch weiterhin über das App-Registrierungsportal vornehmen wollen oder müssen, hier noch einmal der Link:

Navigieren Sie zum Microsoft App-Registrierungsportal unter https://apps.dev.microsoft.com/.

Sie finden das neue Tool innerhalb des Azure-Portals unter Azure Active Directory -> App-Registrierungen (Vorschau).

Ein Klick auf Neue Registrierung startet den Neueintrag für eine neu zu registrierende Anwendung:

Tragen Sie den Namen der Applikation in das Feld Name ein. 

Unter Unterstützte Kontotypen wählen Sie, ob die Anwendung auch außerhalb des aktuellen Tenants zur Verfügung soll, andere Tenants darauf zugreifen dürfen, oder auch eine Anmeldung über ein Microsoft Konto möglich sein soll. 

Nur Konten in diesem Organisationsverzeichnis (Standardverzeichnis)
 
Alle Benutzer- und Gastkonten in Ihrem Verzeichnis können Ihre Anwendung oder API verwenden.
Verwenden Sie diese Option, wenn Ihre Zielgruppe sich innerhalb Ihrer Organisation befindet.
 
Konten in einem beliebigen Organisationsverzeichnis
 
Alle Benutzer und Gäste mit einem Geschäfts-, Schul- oder Unikonto von Microsoft können Ihre Anwendung oder API verwenden. Dazu gehören auch Bildungseinrichtungen und Unternehmen, die Office 365 verwenden.
Verwenden Sie diese Option, wenn Ihre Zielgruppe Kunden aus dem Unternehmens- oder Bildungsbereich sind.
 
Konten in allen Organisationsverzeichnissen und persönliche Microsoft-Konten (z. B. Skype, Xbox, Outlook.com)
 
Alle Benutzer mit einem Geschäfts-, Schul- oder Unikonto bzw. einem persönlichen Microsoft-Konto können Ihre Anwendung oder API verwenden. Dazu gehören Bildungseinrichten und Unternehmen, die Office 365 verwenden, wie auch persönliche Konten, die zur Anmeldung bei Diensten wie Xbox und Skype verwendet werden.
Mit dieser Option beziehen Sie die umfassendste Gruppe von Microsoft-Identitäten ein.
 
Aufgrund temporärer Unterschiede in der Funktionalität werden möglicherweise Fehler angezeigt, wenn Sie nach der Registrierung der Anwendung versuchen, zwischen unterstützten Zielgruppen zu wechseln.

Läuft die Anwendung als Webanwendung, wird als Umleitungs-URI gerne die URL der Webanwendung oder einer darunter liegenden Seiten angegeben – d.h. z. B. http://localhost:5050. Wie im Text angegeben, muss diese Angabe heute noch nicht zwingend hinterlegt werden – allerdings kommt es in vielen Fällen zu Fehlermeldungen, wenn hier kein Wert eingetragen ist. 

Nach Klick auf Registrieren werden alle Optionen für die Konfiguration der Anwendung verfügbar. 

Den erste wichtige Wert stellt die Anwendungs-ID dar. Diese werden Sie später für den Zugriff benötigen.

 

Die Konfiguration der Anwendungs- Registrierung

Drei weitere Einstellungen werden in den nächsten Schritten wichtig. 

  • Das Secret / “Geheime Clientschlüssel”
  • Authentifizierung
  • API-Berechtigungen

Das Secret – Geheime Clientschlüssel

Unter Zertifikate und “Geheimnisse” können Sie nun entweder ein Zertifikat hochladen oder ein sogenanntes Secret erstellen. Diese werden im späteren Verlauf für die Authentifizierung genutzt.

Das Bild unten zeigt die Erstellung eines Secrets (“Geheime Clientschlüssel”).

Nach dem Klick auf Hinzufügen wird das Secret erstellt. Beachten Sie auf dem folgenden Fenster den Hinweis in der Kopfzeile:

“Kopieren Sie den Wert des neuen geheimen Clientschlüssels. Er kann nach dem Verlassen dieser Seite nicht mehr abgerufen werden.”

Hier empfiehlt es sich die Informationen (Applikations ID und Secret) an einer zentralen Stelle abzulegen.

Authentifizierungseinstellungen

Die nächste Seite stellt die Authentifizierungsseite dar. Hier wählen Sie, welche Dienste für die Authentifizierungsmöglichkeiten für die Anwendung zur Verfügung stehen.  

Wenn Sie die Microsoft Authentication Library (MSAL) oder die Active Directory Authentication Library (ADAL) zum Erstellen von Anwendungen für Desktop- oder Mobilgeräte verwenden, können Sie einen der unten vorgeschlagenen Umleitungs-URIs auswählen oder oben einen benutzerdefinierten Umleitungs-URI eingeben. Weitere Informationen finden Sie in der Bibliotheksdokumentation.

Wichtig für die Anwendung ist auch die zweite Entscheidung: soll die Anwendung über ein Token zugreifen können, muss diese Option explizit aktiviert werden.

Ermöglicht einer Anwendung das Anfordern eines Tokens direkt vom Autorisierungsendpunkt. Dies empfiehlt sich nur, wenn die Anwendung eine Single-Page-Architektur (SPA) aufweist, keine Back-End-Komponenten umfasst oder eine Web-API über JavaScript aufruft.

API-Berechtigungen

Unter API-Berechtigungen geben Sie nun an, welche Berechtigungen die Anwendung beim Zugriff haben soll. Hier können Sie sehr filigran die Berechtigungen auf die unterschiedlichen Bereiche (Exchange, Azure AD, Kalender, Kontakte, Chat, …) einstellen.

Klicken Sie hierzu auf Berechtigung hinzufügen und wählen Sie den Bereich aus, für den Sie die Berechtigungen erteilen möchten.

Aktivieren Sie die entsprechenden Berechtigungen. Auf der rechten Seite neben den Berechtigungen sehen sie, ob nach der Aktivierung der Berechtigung eine “Einwilligung” durch einen Administrator notwendig ist. Sollte das notwendig sein, können Sie diese nach dem Speichern der Änderungen über den Punkt Administratorzustimmung für das Standardverzeichnis erteilen sofort zentral ausführen.

Sollte eine Zustimmung durch einen Adminstratoren (Consent) notwendig sein, können Sie diese nach dem Speichern der Änderungen über den Punkt Administratorzustimmung für das Standardverzeichnis erteilen sofort zentral ausführen.

Ein Beispiel (C#)

In diesem Beispiel soll aus Azure AD ein Benutzer herausgesucht werden. Diese Aufgabe übernimmt Graph_Find_User. Als Parameter wird der _userPrincipalName des zu suchenden Benutzers und das Token (die Erstellung des Tokens wird weiter unten beschrieben) für den Zugriff übergeben

Für die Ausführung der Suche nutze ich ein HttpRequestMessage. Diese bekommt als Parameter “Get” sowie die im Graph-Explorer ausgetestete URL https://graph.microsoft.com/v1.0/users/<User> mit.

Test der Abfrage im Graph Explorer

Dazu wird die String-Variable graphRequest aus dem Pfad zum Graph und den Parametern /User/ und <_userPrincipalName> zusammengesetzt.

In Zeile 14 wird über einen Header json als Format “vereinbart”.

In Zeile 15 wird der übergebene Token in die Abfrage als Header übernommen.

public ADAccount Graph_Find_User(string _userPrincipalName, string _token)
       {

            string _userID = string.Empty;
string _graphString = "https://graph.microsoft.com/v1.0/"; string _status = string.Empty; using (var _client = new HttpClient()) { string graphRequest = _graphString+ "users/"+_userPrincipalName; Uri _requestUri = new Uri(graphRequest); using (var _request = new HttpRequestMessage(HttpMethod.Get, graphRequest)) // endpoint + queryParameter = graphRequest { _request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); _request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", _token); ; Task<HttpResponseMessage> _response = _client.SendAsync(_request); _response.Wait(); var _responseTextTask = _response.Result.Content.ReadAsStringAsync(); _responseTextTask.Wait(); ADAccount _myAccount = new ADAccount(); _myAccount = JsonConvert.DeserializeObject<ADAccount>(_responseTextTask.Result); return _myAccount; } } }

Als Antwort lese ich die aus dem Graph-Explorer heraus schon zu erwartende JSON-Rückmeldung (Zeile 20/21), die ich (Zeile 23 / 24) in eine passende Klasse (ADAccount) einlese. Die Struktur der Klasse entspricht der aus dem Graph Explorer erwarteten Antwort:

Die Klasse ADAccount:

public class ADAccount
 {
     public IList<string> businessPhones { get; set; }
     public string displayName { get; set; }
     public string givenName { get; set;  }
     public string jobTitle { get; set; }
     public string mail { get; set; }
     public string mobilePhone { get; set; }
     public string officeLocation { get; set; }
     public string preferredLanguage { get; set; }
     public string surname{ get; set; }
     public string userPrincipalName { get; set; }
     public string id { get; set; }
    
 }

Authentifizierung (Token)

Um die Anwendung authentifizieren zu können (ich hatte bei der Registrierung der Anwendung die Option “Token” aktiviert), benötige ich ein Token

Dieses erstelle ich über _authContext.AcquireTokenAsync (Zeile 25).

Da meine Anwendung inzwischen einen etwas größeren Umfang angenommen hat, sind die meisten Konfigurationsparameter inzwischen in einer Azure SQL Datenbank gespeichert. Diese lese ich mir im ersten Teil in _cfgParams (Zeile 11) ein. In der Struktur liegen nach dem Einlesen Informationen wie die Benutzer-Domäne (Domain.onmicrosoft.com), die URL für Microsoft Graph, die APP ClientID (aus der Registrierung der Anwendung) sowie das App Secret (ebenfalls aus der Registrierung der Anwendung). 

Da die App ID und das Secret in der Datenbank verschlüsselt abgelegt sind, müssen beide entschlüsselt werden. Das erledigt bei mir eine zentrale Funktion _mwPE.DecryptWithByteArray (Zeile 21). Hier könnte z. B. die Version von diesem Link genutzt werden. Haben Sie die App ID und das Secret lokal in einem String, kann das natürlich entfallen.

Der eigentliche Aufruf von AcquireTokenAsync erfolgt eigentlich async (Zeile 24). Leider hat das in meiner Konstellation zu einem Problem geführt. Daher habe ich mich entschieden, den Aufruf etwas umzuformulieren und über Task<> den Ablauf zu steuern. Hat alles funktioniert, erhalten Sie hier das Token, das beim Aufruf von Graph_Find_User neben dem _userPrincipalName übergeben wird.

private async Task<string> AppAuthenticationAsync()
       {
           //  Constants

           mwHelper.PasswordEncoder _mwPE = new mwHelper.PasswordEncoder();

           try
           {
               GetFromWS _getFromWS = new GetFromWS();
               Config_Parameter _cfgParams = new Config_Parameter();
               _cfgParams = _getFromWS.Get_Cfg_Parameters();

               var _tenant = _cfgParams._userDomain;               //  "Domain.onmicrosoft.com";
               var _resource = _cfgParams._ADAppResource;          //  https://graph.microsoft.com/";
               var _clientID = _cfgParams._ADAppClientID;
               var _secret = _cfgParams._ADAppSecret;

               
               var _authority = _cfgParams._ADAppAuthority + _tenant;  // $"https://login.microsoftonline.com/{tenant}";
               var _authContext = new AuthenticationContext(_authority);
               var _credentials = new ClientCredential(_mwPE.DecryptWithByteArray(_clientID), _mwPE.DecryptWithByteArray(_secret));

               // var _authResult = await _authContext.AcquireTokenAsync(_resource, _credentials);
               Task<AuthenticationResult> _authResult = _authContext.AcquireTokenAsync(_resource, _credentials);
               _authResult.Wait();

               return _authResult.Result.AccessToken;
           }
           catch (Exception ex)
           {
               return ("Fehler bei der Erstellung des Accesstokens" + ex.Message);
           }

       }

Eigentlich war damit nicht viel Code notwendig, um einen Benutzer in Azure AD zu suchen.

Die Zeit, die ich damit verbracht hatte, die Puzzle-Steine zusammenzufügen war eher dem Lesen und Suchen geschuldet, da der Teufel wie immer im Detail liegt. 

Ich hatte in meinem Blog mal irgendwann geschrieben, dass ich kein Entwickler wäre – dazu stehe ich noch heute. Insofern soll das Beispiel nur eine Hilfestellung sein, wie ein Einstieg gelingen kann – es ist mit Sicherheit kein Code, der allen kritischen Sichten und Anforderungen genügt. 

Im übrigen  muss ich hier vielen Kollegen für die Code-Schnipsel danken. Viele Bausteine, die auch in mein Beispiel eingeflossen sind, fand ich unter https://vincentlauzon.com, stackoverflow.com (eine wirklich großartige und hilfreiche Seite), oder auch https://dasow.com.

Eine wichtige Voraussetzung für den Code ist die Einbindung unterschiedlicher NuGet-Pakete. Ich habe in meiner gesamten Lösung folgende Pakete eingebunden:

  • Microsoft.Graph
  • Microsoft.Graph.Core
  • Microsoft.Identity.Client
  • Microsoft.IdentityModel.Clients.ActiveDirectory
  • Newtonsoft.Json

Ich hoffe, das Beispiel hilft beim Einstieg…

« Ältere Beiträge Neuere Beiträge »

© 2019 Blog

Theme von Anders NorénHoch ↑