Freigeben über


Erstellen von vom Anbieter gehosteten SharePoint-Add-Ins zum Zugreifen auf SAP-Daten mithilfe des SAP-Gateway für Microsoft

Sie können ein SharePoint-Add-In erstellen, das SAP-Daten und optional SharePoint-Daten liest und schreibt, indem Sie das SAP-Gateway für Microsoft und die Azure Active Directory-Authentifizierungsbibliothek für .NET verwenden. In diesem Artikel werden Sie die Verfahren für das Entwerfen des SharePoint-Add-Ins für einen autorisierten Zugriff auf SAP beschrieben.

Voraussetzungen

Für die in diesem Artikel beschriebenen Verfahren müssen die folgenden erforderlichen Komponenten vorhanden sein:

Grundlegendes zur Authentifizierung und Autorisierung beim SAP-Gateway für Microsoft und SharePoint

Mit OAuth 2.0 in Azure AD können Anwendungen auf mehrere Ressourcen zugreifen, die von Microsoft Azure gehostet werden, und SAP-Gateway für Microsoft ist eine davon. Bei OAuth 2.0 sind Anwendungen, zusätzlich zu Benutzern, Sicherheitsprinzipale. Für Anwendungsprinzipale ist eine Authentifizierung und Autorisierung bei geschützten Ressourcen zusätzlich zu (und manchmal anstelle von) Benutzern erforderlich.

Der Prozess umfasst einen OAuth-"Fluss", bei dem die Anwendung, bei der es sich um ein SharePoint-Add-In handeln kann, ein Zugriffstoken (und aktualisierungstoken) abruft, das von allen von Azure gehosteten Diensten und Anwendungen akzeptiert wird, die für die Verwendung von Azure AD als OAuth 2.0-Autorisierungsserver konfiguriert sind. Der Prozess ist sehr ähnlich wie die Art und Weise, wie die Remotekomponenten eines vom Anbieter gehosteten SharePoint-Add-Ins die Autorisierung für SharePoint erhalten, wie unter Erstellen von SharePoint-Add-Ins, die Autorisierung mit niedriger Vertrauenswürdigkeit verwenden, und den zugehörigen untergeordneten Artikeln beschrieben. Das ACS-Autorisierungssystem verwendet jedoch Azure Access Control Service (ACS) als vertrauenswürdigen Tokenaussteller anstelle von Azure AD.

Tipp

Wenn Ihr SharePoint-Add-In zusätzlich zum SAP-Gateway für Microsoft auch auf SharePoint zugreift, müssen beide Systeme verwendet werden: Azure AD zum Abrufen eines Zugriffstokens für das SAP-Gateway für Microsoft und das ACS-Autorisierungssystem zum Abrufen eines Zugriffstokens für SharePoint. Die Token aus den beiden Quellen können nicht ausgetauscht werden. Weitere Informationen finden Sie unter Hinzufügen von SharePoint-Zugriff auf die ASP.NET-Anwendung (optional).

Wichtig

Azure ACS (Access Control), ein Dienst von Azure Active Directory (Azure AD), wird am 7. November 2018 eingestellt. Diese Deaktivierung hat keinen Einfluss auf das SharePoint-Add-In-Modell, das den Hostnamen https://accounts.accesscontrol.windows.net verwendet, der von der Deaktivierung nicht betroffen ist. Weitere Informationen finden Sie unter Auswirkungen der Deaktivierung von Azure Access Control für SharePoint-Add-Ins.

Eine detaillierte Beschreibung und ein Diagramm des OAuth-Ablaufs, der von OAuth 2.0 in Azure Active Directory verwendet wird, finden Sie unter Autorisieren des Zugriffs auf Webanwendungen mit OAuth 2.0 und Azure Active Directory.

Eine ähnliche Beschreibung und einem Diagramm des Ablaufs für den Zugriff auf SharePoint finden Sie unter Schritte im Kontexttokenablauf.

Erstellen des SharePoint-Add-Ins

So erstellen Sie die Visual Studio-Projektmappe

  1. Erstellen Sie ein SharePoint-Add-In-Projekt in Visual Studio mit den folgenden Schritten. (Für das fortlaufende Beispiel in diesem Artikel wird davon ausgegangen, die Sie C# verwenden. Sie können ein SharePoint-Add-In-Projekt aber auch im Abschnitt Visual Basic der Vorlagen für neue Projekte starten.)

    1. Geben Sie im Assistenten für neue SharePoint-Add-Ins dem Projekt einen Namen, und wählen Sie OK aus. Verwenden Sie für das fortlaufende Beispiel z. B. SAP2SharePoint.
    2. Geben Sie die Domänen-URL Ihrer Office 365-Entwicklerwebsite (einschließlich eines abschließenden Schrägstrichs) als Debugging-Website an, z. B. https://<O365_domain>.sharepoint.com/. Geben Sie Vom Anbieter gehostet als Add-In-Typ an, und wählen Sie dann Weiter aus.
    3. Wählen Sie einen Projekttyp aus. Wählen Sie für das fortlaufende Beispiel ASP.NET Web Forms-Anwendung aus. (Sie können auch ASP.NET-MVC-Anwendungen erstellen, die auf SAP-Gateway für Microsoft zugreifen.) Klicken Sie auf Weiter.
    4. Wählen Sie Azure ACS als Authentifizierungssystem aus. (Ihr SharePoint-Add-In verwendet dieses System, wenn es auf SharePoint zugreift. Dieses System wird nicht verwendet, wenn es auf DAS SAP-Gateway für Microsoft zugreift.) Wählen Sie Fertig stellen aus.
  2. Nachdem das Projekt erstellt wurde, werden Sie aufgefordert, sich bei dem Office 365-Konto anzumelden. Verwenden Sie die Anmeldeinformationen eines Kontoadministrators, z. B. Bob@<O365_domain>.onmicrosoft.com.

  3. Es gibt zwei Projekte in der Visual Studio-Lösung: das richtige SharePoint-Add-In-Projekt und ein ASP.NET Web Forms-Projekt. Fügen Sie das MsAL-Paket ( Microsoft Authentication Library ) mit den folgenden Schritten zum projekt ASP.NET hinzu:

    1. Klicken Sie mit der rechten Maustaste auf den Ordner Referenzen im ASP.NET-Projekt (mit dem Namen SAP2SharePointWeb im fortlaufenden Beispiel), und wählen Sie NuGet-Pakete verwalten aus.
    2. Klicken Sie in dem sich öffnenden Dialog links auf Online. Geben Sie Microsoft.Identity.Client in das Suchfeld ein.
    3. Wenn die MSAL-Bibliothek in den Suchergebnissen angezeigt wird, wählen Sie die Schaltfläche Installieren aus, und akzeptieren Sie die Lizenz, wenn Sie dazu aufgefordert werden.
  4. Fügen Sie das Json.net-Paket mit den folgenden Schritten zum ASP.NET-Projekt hinzu:

    1. Geben Sie in das Suchfeld Json.net ein. Wenn dadurch zu viele Ergebnisse angezeigt werden, suchen Sie nach Newtonsoft.json.
    2. Wenn „Json.net“ in den Suchergebnissen angezeigt wird, klicken Sie auf die Schaltfläche Installieren.
  5. Wählen Sie Schließen aus.

So registrieren Sie Ihre Webanwendung bei Azure AD

  1. Melden Sie sich mit Ihrem Azure-Administratorkonto beim Azure-Portal an.

Hinweis

Aus Sicherheitsgründen wird empfohlen, bei der Entwicklung von Add-Ins kein Administratorkonto zu verwenden.

  1. Wählen Sie auf der linken Seite Active Directory aus.

  2. Klicken Sie auf Ihr Verzeichnis.

  3. Wählen Sie auf der oberen Navigationsleiste ANWENDUNGEN aus.

  4. Wählen Sie in der Symbolleiste am unteren Rand des Bildschirms Hinzufügen aus.

  5. Klicken Sie im sich öffnenden Dialogfeld auf Eine von meinem Unternehmen entwickelte Anwendung hinzufügen.

  6. Geben Sie im Dialogfeld ANWENDUNG HINZUFÜGEN einen Namen für die Anwendung an. Verwenden Sie für das fortlaufende Beispiel ContosoAutomobileCollection.

  7. Wählen Sie als Anwendungstyp Webanwendung und/oder Web-API aus, und klicken Sie dann auf den Pfeil nach rechts.

  8. Auf der zweiten Seite des Dialogfelds verwenden Sie die SSL-Debugging-URL aus dem ASP.NET-Projekt in der Visual Studio-Lösung als ANMELDE-URL. Führen Sie die folgenden Schritte aus, um die URL zu suchen. (Sie müssen das Add-In zunächst mit der Debug-URL registrieren, damit Sie den Visual Studio-Debugger (F5) ausführen können. Wenn Ihr Add-In für das Staging bereit ist, registrieren Sie es erneut mit der URL der Staging-Azure-Website. Weitere Informationen finden Sie unter Ändern des Add-Ins und Bereitstellen des Add-Ins in Azure und Office 365.)

    1. Markieren Sie das ASP.NET-Projekt im Projektmappen-Explorer.
    2. Kopieren Sie im Fenster Eigenschaften den Wert der Eigenschaft SSL-URL. Ein Beispiel ist https://localhost:44300/.
    3. Fügen Sie ihn bei der ANMELDE-URL im Dialogfeld ANWENDUNG HINZUFÜGEN ein.
  9. Weisen Sie der Anwendung im Feld APP-ID-URI einen eindeutigen URI zu, wie den an das Ende der SSL-URL angehängten Anwendungsnamen, z. B. https://localhost:44300/ContosoAutomobileCollection.

  10. Klicken Sie auf die Schaltfläche mit dem Häkchen. Das Azure-Dashboard für die Anwendung wird mit einer Erfolgsmeldung geöffnet.

  11. Wählen Sie im oberen Bereich der Seite KONFIGURIEREN aus.

  12. Scrollen Sie zur CLIENT-ID und erstellen Sie davon eine Kopie. Sie benötigen sie für einen späteren Vorgang.

  13. Erstellen Sie im Abschnitt Schlüssel einen Schlüssel. Dieser wird zunächst nicht angezeigt. Wählen Sie am unteren Rand der Seite SPEICHERN aus, damit der Schlüssel sichtbar wird. Erstellen Sie eine Kopie davon. Sie benötigen diese in einem späteren Schritt.

  14. Scrollen Sie zu Berechtigungen für andere Anwendungen, und wählen Sie Ihre SAP-Gateway für Microsoft-Dienstanwendung aus.

  15. Öffnen Sie die Dropdownliste Delegierte Berechtigungen, und aktivieren Sie die Kontrollkästchen für die Berechtigungen für den SAP-Gateway für Microsoft-Dienst, die Ihr SharePoint-Add-In benötigt.

  16. Klicken Sie unten im Bildschirm auf SPEICHERN.

So konfigurieren Sie die Anwendung für die Kommunikation mit Azure AD

  1. Öffnen Sie in Visual Studio die Datei „web.config“ im ASP.NET-Projekt.
  2. Im Abschnitt <appSettings> haben die Office Developer Tools für Visual Studio Elemente für ClientId und ClientSecret des SharePoint-Add-Ins hinzugefügt. (Diese werden im Azure ACS-Autorisierungssystem verwendet, wenn die ASP.NET Anwendung auf SharePoint zugreift. Sie können sie für das fortlaufende Beispiel ignorieren, aber nicht löschen. Sie sind in vom Anbieter gehosteten SharePoint-Add-Ins erforderlich, auch wenn das Add-In nicht auf SharePoint-Daten zugreift. Ihre Werte ändern sich bei jeder Auswahl von F5 in Visual Studio.)

Fügen Sie die folgenden beiden Elemente zu dem Abschnitt hinzu. Diese werden von der Anwendung für die Authentifizierung bei Azure AD verwendet. (Bedenken Sie, dass Anwendungen, genau wie Benutzer, in Authentifizierungs- und Autorisierungssystemen, die auf OAuth basieren, Sicherheitsprinzipale sind.

<add key="ida:ClientID" value="" />
<add key="ida:ClientKey" value="" />
  1. Fügen Sie die Client-ID ein, die Sie in dem vorherigen Verfahren aus dem Azure AD-Verzeichnis als Wert des Schlüssels ida:ClientID gespeichert haben. Lassen Sie die Groß-/Kleinschreibung und Satzzeichen genauso wie Sie sie kopiert haben, und achten Sie darauf, dass Sie am Anfang oder am Ende des Werts kein Leerzeichen einfügen. Verwenden Sie für den Schlüssel ida:ClientKey den Schlüssel , den Sie aus dem Verzeichnis gespeichert haben. Achten Sie auch in diesem Fall wieder darauf, dass Sie keine Leerzeichen einfügen oder den Wert in irgendeiner Weise ändern. Der Abschnitt <appSettings> sollte jetzt etwa wie folgt aussehen (der Wert ClientId verfügt möglicherweise über eine GUID oder eine leere Zeichenfolge):

    <appSettings>
      <add key="ClientId" value="" />
      <add key="ClientSecret" value="LypZu2yVajlHfPLRn5J2hBrwCk5aBOHxE4PtKCjIQkk=" />
      <add key="ida:ClientID" value="4da99afe-08b5-4bce-bc66-5356482ec2df" />
      <add key="ida:ClientKey" value="URwh/oiPay/b5jJWYHgkVdoE/x7gq3zZdtcl/cG14ss=" />
    </appSettings>
    

    Hinweis

    Für Azure AD ist Ihre Anwendung anhand der „localhost“-URL zu erkennen, die Sie für die Registrierung verwendet haben. Die Client-ID und der geheime Clientschlüssel sind dieser Identität zugeordnet. Wenn Sie bereit sind, Ihre Anwendung in einer Azure-Website bereitzustellen, können Sie sie mit einer neuen URL erneut registrieren.

  2. Fügen Sie, solange Sie sich im Abschnitt appSettings befinden, den Authority-Schlüssel hinzu, und legen Sie dessen Wert auf die Office 365-Domäne (eine_domäne.onmicrosoft.com) Ihres Organisationskontos fest. Im fortlaufende Beispiel ist das Organisationskonto Bob@<O365_domain>.onmicrosoft.com, die Autorität ist also <O365_domain>.onmicrosoft.com.

    <add key="Authority" value="<O365_domain>.onmicrosoft.com" />
    
  3. Fügen Sie, solange Sie sich im Abschnitt appSettings befinden, den AppRedirectUrl-Schlüssel hinzu, und legen Sie dessen Wert auf die Seite fest, zu der der Browser des Benutzers umgeleitet werden sollte, nachdem das ASP.NET-Add-In einen Autorisierungscode von Azure AD abgerufen hat. Dies ist in der Regel die gleiche Seite, auf der sich der Benutzer befand, als der Aufruf von Azure AD getätigt wurde. Verwenden Sie im fortlaufenden Beispiel den Wert „Pages/Default.aspx“ für die SSL-URL, der daran angefügt ist, wie im folgenden Code dargestellt (dies ist ein weiterer Wert, den Sie beim Staging ändern werden):

    <add key="AppRedirectUrl" value="https://localhost:44322/Pages/Default.aspx" />
    
  4. Fügen Sie im Abschnitt appSettings einen ResourceUrl-Schlüssel hinzu, und legen Sie dessen Wert auf den APP-ID-URI des SAP-Gateways für Microsoft fest (nicht den APP-ID-URI Ihrer ASP.NET-Anwendung). Sie erhalten diesen Wert vom SAP-Gateway für Microsoft-Administrator. Es folgt ein Beispiel.

    <add key="ResourceUrl" value="http://<SAP_gateway_domain>.cloudapp.net/" />
    

    Der Abschnitt <appSettings> sollte jetzt ungefähr wie folgt aussehen:

    <appSettings>
      <add key="ClientId" value="06af1059-8916-4851-a271-2705e8cf53c6" />
      <add key="ClientSecret" value="LypZu2yVajlHfPLRn5J2hBrwCk5aBOHxE4PtKCjIQkk=" />
      <add key="ida:ClientID" value="4da99afe-08b5-4bce-bc66-5356482ec2df" />
      <add key="ida:ClientKey" value="URwh/oiPay/b5jJWYHgkVdoE/x7gq3zZdtcl/cG14ss=" />
      <add key="Authority" value="<O365_domain>.onmicrosoft.com" />
      <add key="AppRedirectUrl" value="https://localhost:44322/Pages/Default.aspx" />
      <add key="ResourceUrl" value="http://<SAP_gateway_domain>.cloudapp.net/" />
    </appSettings>
    
  5. Speichern und schließen Sie die Datei „web.config“.

    Tipp

    Lassen Sie die Datei „web.config“ während der Ausführung des Visual Studio-Debuggers (F5) nicht geöffnet. Die Office Developer Tools für Visual Studio ändern den Wert ClientId (nicht den Wert ida:ClientID) jedes Mal, wenn Sie F5 drücken. Deshalb müssen Sie auf eine Aufforderung zum erneuten Laden der Datei „web.config“ reagieren, wenn diese geöffnet ist, bevor das Debuggen ausgeführt werden kann.

So fügen Sie eine Hilfsklasse zur Authentifizierung bei Azure AD hinzu

  1. Klicken Sie mit der rechten Maustaste auf das ASP.NET-Projekt, und verwenden Sie das Visual Studio-Verfahren zum Hinzufügen von Elementen, um dem Projekt eine neue Klassendatei mit dem Namen AADAuthHelper.cs hinzuzufügen.

  2. Fügen Sie der Datei die folgenden using-Anweisungen hinzu.

    using Microsoft.IdentityModel.Clients.ActiveDirectory;
    using System.Configuration;
    using System.Web.UI;
    
  3. Ändern Sie das Zugriffsschlüsselwort von public in internal, und fügen Sie das static-Schlüsselwort zur Klassendeklaration hinzu.

    internal static class AADAuthHelper
    
  4. Fügen Sie der Klasse die folgenden Felder hinzu. In diesen Feldern werden Informationen gespeichert, die die ASP.NET-Anwendung zum Abrufen von Zugriffstoken von AAD verwendet.

    private static readonly string _authority = ConfigurationManager.AppSettings["Authority"];
    private static readonly string _appRedirectUrl = ConfigurationManager.AppSettings["AppRedirectUrl"];
    private static readonly string _resourceUrl = ConfigurationManager.AppSettings["ResourceUrl"];
    private static readonly string _clientId = ConfigurationManager.AppSettings["ida:ClientID"];
    private static readonly ClientCredential _clientCredential = new ClientCredential(
                              ConfigurationManager.AppSettings["ida:ClientID"],
                              ConfigurationManager.AppSettings["ida:ClientKey"]);
    
    private static readonly AuthenticationContext _authenticationContext =
                new AuthenticationContext("https://login.windows.net/common/" +
                                          ConfigurationManager.AppSettings["Authority"]);
    
  5. Fügen Sie der Klasse die folgende Eigenschaft hinzu. Diese Eigenschaft enthält die URL zum Azure AD-Anmeldebildschirm.

    private static string AuthorizeUrl
    {
      get
      {
        return string.Format("https://login.windows.net/{0}/oauth2/authorize?response_type=code&amp;redirect_uri={1}&amp;client_id={2}&amp;state={3}",
            _authority,
            _appRedirectUrl,
            _clientId,
            Guid.NewGuid().ToString());
      }
    }
    
  6. Fügen Sie der Klasse die folgenden Eigenschaften hinzu. Diese speichern das Zugriffs- und Aktualisierungstoken zwischen und überprüfen ihre Gültigkeit.

    public static Tuple<string, DateTimeOffset> AccessToken
    {
      get {
        return HttpContext.Current.Session["AccessTokenWithExpireTime-" + _resourceUrl]
            as Tuple<string, DateTimeOffset>;
      }
    
      set { HttpContext.Current.Session["AccessTokenWithExpireTime-" + _resourceUrl] = value; }
    }
    
    private static bool IsAccessTokenValid
    {
      get
      {
        return AccessToken != null
          && !string.IsNullOrEmpty(AccessToken.Item1)
          && AccessToken.Item2 > DateTimeOffset.UtcNow;
      }
    }
    
    private static string RefreshToken
    {
      get { return HttpContext.Current.Session["RefreshToken" + _resourceUrl] as string; }
      set { HttpContext.Current.Session["RefreshToken-" + _resourceUrl] = value; }
    }
    
    private static bool IsRefreshTokenValid
    {
      get { return !string.IsNullOrEmpty(RefreshToken); }
    }
    
  7. Fügen Sie der Klasse die folgenden Methoden hinzu. Diese werden verwendet, um die Gültigkeit des Autorisierungscodes zu überprüfen und ein Zugriffstoken von Azure AD mithilfe eines Authentifizierungscodes oder eines Aktualisierungstokens abzurufen.

    private static bool IsAuthorizationCodeNotNull(string authCode)
    {
      return !string.IsNullOrEmpty(authCode);
    }
    
    private static Tuple<Tuple<string,DateTimeOffset>,string> AcquireTokensUsingAuthCode(string authCode)
    {
      var authResult = _authenticationContext.AcquireTokenByAuthorizationCode(
                  authCode,
                  new Uri(_appRedirectUrl),
                  _clientCredential,
                  _resourceUrl);
    
      return new Tuple<Tuple<string, DateTimeOffset>, string>(
                  new Tuple<string, DateTimeOffset>(authResult.AccessToken, authResult.ExpiresOn),
                  authResult.RefreshToken);
    }
    
    private static Tuple<string, DateTimeOffset> RenewAccessTokenUsingRefreshToken()
    {
      var authResult = _authenticationContext.AcquireTokenByRefreshToken(
                          RefreshToken,
                          _clientCredential.OwnerId,
                          _clientCredential,
                          _resourceUrl);
    
      return new Tuple<string, DateTimeOffset>(authResult.AccessToken, authResult.ExpiresOn);
    }
    
  8. Fügen Sie der Klasse die folgende Methode hinzu. Sie wird vom ASP.NET-Code dahinter aufgerufen, um ein gültiges Zugriffstoken zu erhalten, bevor ein Aufruf zum Abrufen von SAP-Daten über SAP-Gateway für Microsoft erfolgt.

    internal static void EnsureValidAccessToken(Page page)
    {
      if (IsAccessTokenValid)
      {
        return;
      }
      else if (IsRefreshTokenValid)
      {
        AccessToken = RenewAccessTokenUsingRefreshToken();
        return;
      }
      else if (IsAuthorizationCodeNotNull(page.Request.QueryString["code"]))
      {
          Tuple<Tuple<string, DateTimeOffset>, string> tokens = null;
          try
          {
            tokens = AcquireTokensUsingAuthCode(page.Request.QueryString["code"]);
          }
          catch
          {
            page.Response.Redirect(AuthorizeUrl);
          }
          AccessToken = tokens.Item1;
          RefreshToken = tokens.Item2;
        return;
      }
      else
      {
        page.Response.Redirect(AuthorizeUrl);
      }
    }
    

Tipp

Die AADAuthHelper -Klasse hat nur eine minimale Fehlerbehandlung. Für eine stabiles SharePoint-Add-In in Produktionsqualität fügen Sie weitere Fehlerbehandlungen, wie im folgenden MSDN-Knoten beschrieben, hinzu: Autorisieren des Zugriffs auf Webanwendungen mit OAuth 2.0 und Azure Active Directory.

So erstellen Sie Datenmodellklassen

  1. Erstellen Sie eine oder mehrere Klassen, um die Daten zu modellieren, die das Add-In von SAP abruft. Im fortlaufenden Beispiel gibt es nur eine Datenmodellklasse. Klicken Sie mit der rechten Maustaste auf das ASP.NET-Projekt, und verwenden Sie das Visual Studio-Verfahren zum Hinzufügen von Elementen, um dem Projekt eine neue Klassendatei mit dem Namen Automobile.cs hinzuzufügen.

  2. Fügen Sie den folgenden Code zum Textteil der Klasse hinzu:

    public string Price;
    public string Brand;
    public string Model;
    public int Year;
    public string Engine;
    public int MaxPower;
    public string BodyStyle;
    public string Transmission;
    

So fügen Sie den zugrunde liegenden Code hinzu, um Daten über das SAP-Gateway für Microsoft aus SAP abzurufen

  1. Öffnen Sie die Datei „Default.aspx.cs“, und fügen Sie die folgenden using-Anweisungen hinzu.

    using System.Net;
    using Newtonsoft.Json.Linq;
    
  2. Fügen Sie der Default-Klasse eine const-Deklaration hinzu, deren Wert die Basis-URL des SAP OData-Endpunkts ist, auf den das Add-In zugreift. Es folgt ein Beispiel:

    private const string SAP_ODATA_URL = @"https://<SAP_gateway_domain>.cloudapp.net:8081/perf/sap/opu/odata/sap/ZCAR_POC_SRV/";
    
  3. Die Office Developer Tools für Visual Studio haben eine Page_PreInit-Methode und eine Page_Load-Methode hinzugefügt. Kommentieren Sie den Code in der Page_Load-Methode aus, und kommentieren Sie die gesamte Page_Init-Methode aus. Dieser Code wird in diesem Beispiel nicht verwendet. (Wenn Ihr SharePoint-Add-In auf SharePoint zugreift, stellen Sie diesen Code wieder her. Weitere Informationen finden Sie unter Hinzufügen von SharePoint-Zugriff auf die ASP.NET-Anwendung (optional).)

  4. Fügen Sie die folgende Zeilen im oberen Bereich der Page_Load-Methode hinzu. Dadurch wird der Prozess des Debuggens vereinfacht, da Ihre ASP.NET-Anwendung mit dem SAP-Gateway für Microsoft über SSL (HTTPS) kommuniziert, der „localhost:port“-Server jedoch nicht konfiguriert ist, um dem Zertifikat des SAP-Gateways für Microsoft zu vertrauen. Ohne diese Codezeile würden Sie eine Warnung aufgrund eines ungültigen Zertifikats erhalten, bevor „Default.aspx“ geöffnet wird. In einigen Browsern können Sie diesen Fehler wegklicken, in einigen können Sie „Default.aspx“ jedoch überhaupt nicht öffnen.

    ServicePointManager.ServerCertificateValidationCallback = (s, cert, chain, errors) => true;
    

    Wichtig

    Löschen Sie diese Zeile, wenn Sie bereit sind, die ASP.NET-Anwendung für das Staging bereitzustellen. Weitere Informationen finden Sie unter Ändern des Add-Ins und Bereitstellen für Azure und Office 365.

  5. Fügen Sie der Page_Load-Methode den folgenden Code hinzu. Die Zeichenfolge, die Sie an die GetSAPData -Methode übergeben, ist eine OData-Abfrage.

    if (!IsPostBack)
    {
      GetSAPData("DataCollection?$top=3");
    }
    
  6. Fügen Sie die folgende Methode zur Standardklasse hinzu. Diese Methode stellt zunächst sicher, dass der Cache für das Zugriffstoken ein gültiges Zugriffstoken enthält, das von Azure AD abgerufen wurde. Dann erstellt sie eine HTTP GET-Anforderung, die das Zugriffstoken enthält, und sendet diese an den SAP OData-Endpunkt. Das Ergebnis wird als JSON-Objekt zurückgegeben, das in ein .NET List-Objekt konvertiert wird. Drei Eigenschaften der Elemente werden in einem Array verwendet, das an DataListView gebunden ist.

    private void GetSAPData(string oDataQuery)
    {
      AADAuthHelper.EnsureValidAccessToken(this);
    
      using (WebClient client = new WebClient())
      {
        client.Headers[HttpRequestHeader.Accept] = "application/json";
        client.Headers[HttpRequestHeader.Authorization] = "Bearer " + AADAuthHelper.AccessToken.Item1;
        var jsonString = client.DownloadString(SAP_ODATA_URL + oDataQuery);
        var jsonValue = JObject.Parse(jsonString)["d"]["results"];
        var dataCol = jsonValue.ToObject<List<Automobile>>();
    
        var dataList = dataCol.Select((item) => {
            return item.Brand + " " + item.Model + " " + item.Price;
            }).ToArray();
    
        DataListView.DataSource = dataList;
        DataListView.DataBind();
      }
    }
    

So erstellen Sie die Benutzeroberfläche

  1. Öffnen Sie die Datei „Default.aspx“, und fügen Sie dem form auf der Seite das folgende Markup hinzu:

    <div>
    <h3>Data from SAP via SAP Gateway for Microsoft</h3>
    
    <asp:ListView runat="server" ID="DataListView">
      <ItemTemplate>
        <tr runat="server">
          <td runat="server">
            <asp:Label ID="DataLabel" runat="server"
              Text="<%# Container.DataItem.ToString()%>" /><br />
          </td>
        </tr>
      </ItemTemplate>
    </asp:ListView>
    </div>
    
  2. Geben Sie der Webseite optional das Erscheinungsbild einer SharePoint-Seite, indem Sie das SharePoint -Chromsteuerelement und das Stylesheet der Host-SharePoint-Website verwenden.

So testen Sie das Add-In mit F5 in Visual Studio

  1. Drücken Sie in Visual Studio F5.
  2. Bei der ersten Verwendung von F5 werden Sie möglicherweise aufgefordert, sich bei der Entwicklerwebsite anzumelden, die Sie verwenden. Verwenden Sie die Anmeldeinformationen des Websiteadministrators. Im folgenden Beispiel wird dieser Wert auf Bob@<O365_domain>.onmicrosoft.com festgelegt.
  3. Wenn Sie F5 zum ersten Mal verwenden, werden Sie aufgefordert, dem Add-In Berechtigungen zu gewähren. Klicken Sie auf Vertrauen.
  4. Nach einer kurzen Verzögerung, in der das Zugriffstoken abgerufen wird, wird die Seite Default.aspx geöffnet. Vergewissern Sie sich, dass die SAP-Daten angezeigt werden.

Hinzufügen von SharePoint-Zugriff auf die ASP.NET-Anwendung (optional)

Ihr SharePoint-Add-In muss natürlich nicht nur SAP-Daten in einer Webseite verfügbar machen, die von SharePoint aus geöffnet wurde. Es kann SharePoint-Daten auch erstellen, lesen, aktualisieren und löschen. Ihre CodeBehind kann dies mithilfe des SharePoint-Clientobjektmodells (CSOM) oder der REST-APIs von SharePoint ausführen. Das CSOM wird als ein Paar von Assemblys bereitgestellt, das die Office Developer Tools für Visual Studio automatisch in das ASP.NET-Projekt eingefügt und in Visual Studio auf Lokal kopieren festgelegt haben, damit diese in das ASP.NET-Anwendungspaket eingeschlossen werden.

Um Informationen zur Verwendung von CSOM zu erhalten, beginnen Sie mit Ausführen grundlegender Vorgänge unter Verwendung von SharePoint-Clientbibliothekscode. Informationen zur Verwendung der REST-APIs erfahren Sie unter Grundlegendes und Verwenden der SharePoint-REST-Schnittstelle.

Unabhängig davon, ob Sie CSOM oder die REST-APIs zum Zugreifen auf SharePoint verwenden, muss Ihre ASP.NET-Anwendung ein Zugriffstoken für SharePoint abrufen, genau wie für das SAP-Gateway für Microsoft. Weitere Informationen finden Sie unter Grundlegendes zur Authentifizierung und Autorisierung beim SAP-Gateway für Microsoft und SharePoint.

Das folgende Verfahren enthält einige grundlegende Richtlinien dazu, aber es wird empfohlen, dass Sie zuerst die folgenden Artikel lesen:

So fügen Sie der ASP.NET-Anwendung SharePoint-Zugriff hinzu

  1. Öffnen Sie die Default.aspx.cs Datei, und heben Sie die Auskommentierung der Methode auf Page_PreInit . Heben Sie außerdem die Auskommentierung des Codes auf, den die Office Developer Tools für Visual Studio der Page_Load -Methode hinzugefügt haben.

  2. Wenn das SharePoint-Add-In auf SharePoint-Daten zugreifen soll, müssen Sie das SharePoint-Kontexttoken zwischenspeichern, das auf der Seite „Default.aspx“ bereitgestellt wird, wenn das Add-In in SharePoint gestartet wird. Dadurch wird sichergestellt, dass das SharePoint-Kontexttoken nicht verloren geht, wenn der Browser nach der Azure AD-Authentifizierung umgeleitet wird. (Es gibt mehrere Möglichkeiten zum Zwischenspeichern dieses Kontexts). Die Office Developer Tools für Visual Studio fügen dem ASP.NET-Projekt, das den Großteil der Arbeit erledigt, eine SharePointContext.cs-Datei hinzu. Um den Sitzungscache zu verwenden, fügen Sie einfach den folgenden Code innerhalb des if (!IsPostBack)-Blocks vor dem Code, der das SAP-Gateway für Microsoft aufruft, hinzu.

    if (HttpContext.Current.Session["SharePointContext"] == null)
    {
        HttpContext.Current.Session["SharePointContext"]
            = SharePointContextProvider.Current.GetSharePointContext(Context);
    }
    
  3. Die SharePointContext.cs-Datei ruft eine andere Datei auf, die die Office Developer Tools für Visual Studio dem Projekt hinzugefügt haben: TokenHelper.cs. Diese Datei enthält den größten Teil des Codes, der zum Abrufen und Verwenden von Zugriffstoken für SharePoint erforderlich ist. Sie stellt jedoch keinen Code für das Erneuern eines abgelaufenen Zugriffstoken oder Aktualisierungstoken bereit. Sie enthält außerdem keinen Code zum Zwischenspeichern von Token. Für ein SharePoint-Add-In in Produktionsqualität müssen Sie diesen Code hinzufügen. Die Zwischenspeicherlogik im vorherigen Schritt ist ein Beispiel. Ihr Code sollte außerdem das Zugriffstoken zwischenspeichern und es wiederverwenden, bis es abgelaufen ist. Wenn das Zugriffstoken abgelaufen ist, sollte Ihr Code das Aktualisierungstoken verwenden, um ein neues Zugriffstoken abzurufen.

  4. Fügen Sie die Datenaufrufe zu SharePoint mithilfe von CSOM oder REST hinzu. Das folgende Beispiel ist eine Änderung des CSOM-Codes, den die Office Developer Tools für Visual Studio zur Page_Load-Methode hinzugefügt haben. In diesem Beispiel wurde der Code in eine separate Methode verschoben; es beginnt mit dem Abrufen des zwischengespeicherten Kontexttokens.

    private void GetSharePointTitle()
    {
        var spContext = HttpContext.Current.Session["SharePointContext"] as SharePointContext;
        using (var clientContext = spContext.CreateUserClientContextForSPHost())
        {
            clientContext.Load(clientContext.Web, web => web.Title);
            clientContext.ExecuteQuery();
            SharePointTitle.Text = "SharePoint website title is: " + clientContext.Web.Title;
        }
    }
    
  5. Fügen Sie Benutzeroberflächenelemente hinzu, um die SharePoint-Daten zu rendern. Im Folgenden ist das HTML-Steuerelement gezeigt, das in der vorhergehenden Methode referenziert wird:

    <h3>SharePoint title</h3>
    <asp:Label ID="SharePointTitle" runat="server"></asp:Label><br />
    

    Hinweis

    Beim Debuggen des SharePoint-Add-Ins wird dieses von den Office Developer Tools für Visual Studio bei jedem Drücken von F5 in Visual Studio erneut bei Azure ACS registriert. Wenn Sie das SharePoint-Add-In bereitstellen, müssen Sie ihm eine langfristige Registrierung geben. Weitere Informationen finden Sie unter Ändern des Add-Ins und Bereitstellen für Azure und Office 365.

Ändern des Add-Ins und Bereitstellen für Azure und Office 365

Wenn Sie das Debugging des SharePoint-Add-Ins mit F5 in Visual Studio abgeschlossen haben, müssen Sie die ASP.NET-Anwendung auf einer tatsächlichen Azure-Website bereitstellen.

So erstellen Sie die Azure-Website

  1. Öffnen Sie im Microsoft Azure-Portal auf der linken Navigationsleiste Websites.

  2. Klicken Sie im unteren Bereich der Seite auf NEU, und wählen Sie im Dialogfeld NEU die Option Website |SCHNELLERFASSUNG aus.

  3. Geben Sie einen Domänennamen ein, und wählen Sie Website ERSTELLEN aus. Erstellen Sie eine Kopie der URL der neuen Website. Sie hat das Format my_domain.azurewebsites.net.

So ändern Sie den Code und das Markup in der Anwendung

  1. Entfernen Sie in Visual Studio die Zeile ServicePointManager.ServerCertificateValidationCallback = (s, cert, chain, errors) => true; aus der datei Default.aspx.cs .
  2. Öffnen Sie die web.config-Datei des ASP.NET-Projekts, und ändern Sie den Domänenteil des Werts des AppRedirectUrl Schlüssels im Abschnitt in appSettings die Domäne der Azure-Website. Ändern Sie beispielsweise <add key="AppRedirectUrl" value="https://localhost:44322/Pages/Default.aspx" /> in <add key="AppRedirectUrl" value="https://my_domain.azurewebsites.net/Pages/Default.aspx" />.
  3. Klicken Sie im SharePoint-Add-In-Projekt mit der rechten Maustaste auf die AppManifest.xml Datei, und wählen Sie Code anzeigen aus.
  4. Ersetzen Sie im StartPage -Wert die Zeichenfolge ~remoteAppUrl durch die vollständige Domäne der Azure-Website einschließlich des Protokolls, z. B https://my_domain.azurewebsites.net. . Der gesamte StartPage Wert sollte nun sein https://my_domain.azurewebsites.net/Pages/Default.aspx (in der Regel entspricht der StartPage Wert genau dem Wert des AppRedirectUrl Schlüssels in der web.config Datei).

So ändern Sie die AAD-Registrierung und registrieren das Add-In bei ACS

  1. Melden Sie sich mit Ihrem Azure-Administratorkonto beim Azure-Portal an.

  2. Wählen Sie auf der linken Seite Active Directory aus.

  3. Klicken Sie auf Ihr Verzeichnis.

  4. Wählen Sie auf der oberen Navigationsleiste ANWENDUNGEN aus.

  5. Öffnen Sie die von Ihnen erstellte Anwendung. Im fortlaufenden Beispiel ist das ContosoAutomobileCollection.

  6. Ändern Sie für jeden der folgenden Werte den Teil „localhost:port“ des Werts in die Domäne Ihrer neuen Azure-Website:

    • ANMELDE-URL
    • APP-ID-URI
    • ANTWORT-URL

    Wenn beispielsweise der APP-ID-URIhttps://localhost:44304/ContosoAutomobileCollection ist, ändern Sie ihn in https://<my_domain>.azurewebsites.net/ContosoAutomobileCollection.

  7. Klicken Sie unten im Bildschirm auf SPEICHERN.

  8. Registrieren Sie das Add-In bei Azure ACS. Dies muss auch dann ausgeführt werden, wenn das Add-In nicht auf SharePoint zugreift und keine Token aus ACS verwendet, da derselbe Prozess auch das Add-In beim Add-In-Verwaltungsdienst des Office 365-Abonnements registriert (eine Anforderung). (Dieser wird als „Add-In-Verwaltungsdienst“ bezeichnet, da SharePoint-Add-Ins ursprünglich „Apps für SharePoint“ hießen.)

    Sie führen die Registrierung auf der Seite „AppRegNew.aspx“ einer beliebigen SharePoint-Website im Office 365-Abonnement aus. Weitere Informationen finden Sie unter Registrieren von SharePoint-Add-Ins.

    Im Rahmen dieses Prozesses erhalten Sie eine neue Client-ID und einen geheimen Clientschlüssel. Fügen Sie diese Werte in der Datei „web.config“ für die Schlüssel ClientId (nicht ida:ClientID) und ClientSecret ein.

    Warnung

    Wenn Sie aus irgendeinem Grund auf F5 drücken, nachdem Sie diese Änderung vorgenommen haben, werden einer oder beide Werte von den Office Developer Tools überschrieben. Aus diesem Grund sollten Sie die mit „AppRegNew.aspx“ abgerufenen Werte notieren und immer überprüfen, ob die Werte in der Datei „web.config“ korrekt sind, bevor Sie die ASP.NET-Anwendung veröffentlichen.

Veröffentlichen der ASP.NET-Anwendung in Azure und Installieren des SharePoint-Add-Ins

  1. Es gibt mehrere Methoden zum Veröffentlichen einer ASP.NET-Anwendung auf einer Azure-Website. Weitere Informationen finden Sie unter Lokale Git-Bereitstellung im Azure-App-Dienst.
  2. Klicken Sie in Visual Studio mit der rechten Maustaste auf das SharePoint-Add-In-Projekt, und wählen Sie Packen aus. Wählen Sie auf der Seite Add-In veröffentlichen, die geöffnet wird, die Option Add-In packen aus. Der Datei-Explorer öffnet den Ordner mit dem Add-In-Paket.
  3. Melden Sie sich bei Office 365 als globaler Administrator an, und navigieren Sie zu der Websitesammlung des Add-In-Katalogs der Organisation. (Wenn es keine gibt, erstellen Sie es. Weitere Informationen finden Sie unter Verwenden des Add-In-Katalogs, um benutzerdefinierte Geschäfts-Add-Ins für Ihre SharePoint Online-Umgebung verfügbar zu machen.)
  4. Laden Sie das Add-In in den Add-In-Katalog hoch.
  5. Navigieren Sie zur Seite Websiteinhalt einer beliebigen Website im Abonnement, und klicken Sie auf Add-In hinzufügen.
  6. Scrollen Sie auf der Seite Ihre Add-Ins zum Abschnitt Add-Ins, die Sie hinzufügen können, und klicken Sie auf das Symbol für Ihr Add-In.
  7. Nachdem das Add-In installiert wurde, klicken Sie auf das zugehörige Symbol auf der Seite Websiteinhalt, um das Add-In zu starten.

Unter Bereitstellen und Installieren von SharePoint-Add-Ins: Methoden und Optionen finden Sie weitere Informationen über die Installation von SharePoint-Add-Ins.

Bereitstellen des Add-Ins an die Produktion

Wenn Sie alle Tests abgeschlossen haben, können Sie das Add-In in Produktion bereitstellen. Dafür sind möglicherweise einige Änderungen erforderlich.

  1. Wenn sich die Produktionsdomäne der ASP.NET Anwendung von der Stagingdomäne unterscheidet, müssen Sie den AppRedirectUrl Wert im web.config und den StartPage Wert in der AppManifest.xml-Datei ändern und das SharePoint-Add-In neu packen. Informationen dazu finden Sie im Verfahren So ändern Sie den Code und das Markup in der Anwendung weiter oben.
  2. Die Änderung der Domäne erfordert auch, dass Sie die Add-In-Registrierung mit Azure AD bearbeiten. Im Verfahren So ändern Sie die AAD-Registrierung und registrieren das Add-In bei ACS weiter oben in diesem Artikel finden Sie weitere Informationen.
  3. Die Änderung der Domäne erfordert auch, dass Sie das Add-In bei ACS (und dem Add-In-Verwaltungsdienst des Abonnements), wie in diesem Verfahren beschrieben, erneut registrieren. (Es gibt keine Möglichkeit, die Registrierung eines Add-Ins bei ACS zu bearbeiten .) Es ist jedoch nicht erforderlich, auf der Seite AppRegNew.aspx eine neue Client-ID oder einen geheimen Clientschlüssel zu generieren. Sie können die ursprünglichen Werte aus den ClientId Schlüsseln (nicht ida:ClientID) und ClientSecret des web.config in das Formular AppRegNew kopieren. Wenn Sie neue Generieren, achten Sie darauf, die neuen Werte in die Schlüssel in web.configzu kopieren.

Siehe auch