Freigeben über


Arbeiten mit dem .NET-Back-End-Server-SDK für Azure Mobile Apps

In diesem Thema erfahren Sie, wie Sie das .NET-Back-End-Server-SDK in wichtigen Azure App Service Mobile Apps-Szenarien verwenden. Das Azure Mobile Apps SDK hilft Ihnen bei der Arbeit mit mobilen Clients aus Ihrer ASP.NET-Anwendung.

Tipp

Das .NET Server SDK für Azure Mobile Apps ist Open Source auf GitHub. Das Repository enthält den gesamten Quellcode, einschließlich der gesamten Server-SDK-Komponententestsuite und einiger Beispielprojekte.

Referenzdokumentation

Die Referenzdokumentation für das Server-SDK befindet sich hier: Azure Mobile Apps .NET Reference.

Anleitung: Backend für mobile .NET-Anwendungen erstellen

Wenn Sie ein neues Projekt starten, können Sie eine App Service-Anwendung entweder über das Azure-Portal oder Visual Studio erstellen. Sie können die App Service-Anwendung lokal ausführen oder das Projekt in Ihrer cloudbasierten mobilen App Service-App veröffentlichen.

Wenn Sie einem vorhandenen Projekt mobile Funktionen hinzufügen, lesen Sie den Abschnitt " Herunterladen und Initialisieren des SDK ".

Erstellen eines .NET-Back-End mithilfe des Azure-Portals

Um ein mobiles App Service-Back-End zu erstellen, führen Sie entweder das Schnellstart-Lernprogramm aus, oder führen Sie die folgenden Schritte aus:

  1. Melden Sie sich beim Azure-Portalan.

  2. Wählen Sie +NEW>Web + Mobile>App aus, und geben Sie dann einen Namen für Ihr Mobile Apps-Back-End an.

  3. Wählen Sie für die Ressourcengruppe eine vorhandene Ressourcengruppe aus, oder erstellen Sie eine neue Gruppe (mit demselben Namen wie Ihre App).

  4. Für App Service-Plan ist der Standardplan (in der Standardebene) ausgewählt. Sie können auch einen anderen Plan auswählen oder einen neuen Plan erstellen.

    Die Einstellungen des App Service-Plans bestimmen den Standort, die Features, die Kosten und die Computeressourcen, die Ihrer App zugeordnet sind. Weitere Informationen zu App Service-Plänen und zum Erstellen eines neuen Plans in einem anderen Preisniveau und an Ihrem gewünschten Standort finden Sie in der detaillierten Übersicht über Azure App Service-Pläne.

  5. Klicken Sie auf Erstellen. In diesem Schritt wird das Back-End für mobile Apps erstellt.

  6. Wählen Sie im Bereich "Einstellungen" für das neue Back-End mobile Apps die Option "Schnellstart> ihrer Client-App-Plattform >Verbinden einer Datenbank" aus.

    Auswahlen zum Verbinden einer Datenbank

  7. Wählen Sie im Bereich " Datenverbindung hinzufügen " die Option "SQL-Datenbank>erstellen" aus. Geben Sie den Datenbanknamen ein, wählen Sie ein Preisniveau aus, und wählen Sie dann "Server" aus. Sie können diese neue Datenbank wiederverwenden. Wenn Sie bereits an demselben Speicherort über eine Datenbank verfügen, können Sie stattdessen "Vorhandene Datenbank verwenden" auswählen. Die Verwendung einer Datenbank an einem anderen Ort wird aufgrund von Bandbreitenkosten und höherer Latenz nicht empfohlen.

    Auswählen einer Datenbank

  8. Geben Sie im Bereich "Neuer Server " einen eindeutigen Servernamen in das Feld " Servername " ein, geben Sie eine Anmeldung und ein Kennwort ein, wählen Sie "Azure-Dienste für den Zugriff auf den Server zulassen" aus, und wählen Sie "OK" aus. In diesem Schritt wird die neue Datenbank erstellt.

  9. Wählen Sie im Bereich "Datenverbindung hinzufügen die Verbindungszeichenfolge aus, geben Sie die Anmelde- und Kennwortwerte für Ihre Datenbank ein und wählen Sie OK aus.

    Warten Sie einige Minuten, bis die Datenbank erfolgreich bereitgestellt wurde, bevor Sie fortfahren.

Wählen Sie im Blatt " Erste Schritte " unter " Tabellen-API erstellen" C# als Back-End-Sprache aus. Klicken Sie auf Herunterladen, extrahieren Sie die komprimierten Projektdateien auf Ihren lokalen Computer, und öffnen Sie die Projektmappe in Visual Studio.

Erstellen eines .NET-Back-Ends mit Visual Studio 2017

Installieren Sie die Azure-Workload über das Visual Studio-Installationsprogramm, um das Azure Mobile Apps-Projekt aus Visual Studio zu veröffentlichen. Nachdem Sie das SDK installiert haben, erstellen Sie mithilfe der folgenden Schritte eine ASP.NET Anwendung:

  1. Öffnen Sie das Dialogfeld Neues Projekt (aus Datei>Neu>Projekt...).
  2. Erweitern Sie Visual C# , und wählen Sie "Web" aus.
  3. Wählen Sie ASP.NET Webanwendung (.NET Framework) aus.
  4. Geben Sie den Projektnamen ein. Klicken Sie dann auf OK.
  5. Wählen Sie Azure Mobile App aus der Liste der Vorlagen aus.
  6. Klicken Sie auf "OK ", um die Lösung zu erstellen.
  7. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf das Projekt, und wählen Sie "Veröffentlichen" aus, und wählen Sie dann "App Service " als Veröffentlichungsziel aus.
  8. Folgen Sie den Anweisungen, um sich zu authentifizieren, und wählen Sie einen neuen oder vorhandenen Azure App Service aus, der veröffentlicht werden soll.

Erstellen eines .NET-Back-Ends mit Visual Studio 2015

Installieren Sie das Azure SDK für .NET (Version 2.9.0 oder höher), um ein Azure Mobile Apps-Projekt in Visual Studio zu erstellen. Nachdem Sie das SDK installiert haben, erstellen Sie mithilfe der folgenden Schritte eine ASP.NET Anwendung:

  1. Öffnen Sie das Dialogfeld Neues Projekt (aus Datei>Neu>Projekt...).
  2. Erweitern Sie Templates>Visual C# und wählen Sie Web aus.
  3. Wählen Sie ASP.NET Webanwendung aus.
  4. Geben Sie den Projektnamen ein. Klicken Sie dann auf OK.
  5. Wählen Sie unter ASP.NET 4.5.2-Vorlagenazure Mobile App aus. Überprüfen Sie den Host in der Cloud , um ein mobiles Back-End in der Cloud zu erstellen, in dem Sie dieses Projekt veröffentlichen können.
  6. Klicke auf OK.

Vorgehensweise: Herunterladen und Initialisieren des SDK

Das SDK ist auf NuGet.org verfügbar. Dieses Paket enthält die Basisfunktionalität, die für die ersten Schritte mit dem SDK erforderlich ist. Zum Initialisieren des SDK müssen Sie Aktionen für das HttpConfiguration-Objekt ausführen.

Das SDK installieren

Um das SDK zu installieren, klicken Sie mit der rechten Maustaste auf das Serverprojekt in Visual Studio, wählen Sie "NuGet-Pakete verwalten" aus, suchen Sie nach dem Paket "Microsoft.Azure.Mobile.Server ", und klicken Sie dann auf "Installieren".

Initialisieren des Serverprojekts

Ein .NET-Back-End-Serverprojekt wird ähnlich wie andere ASP.NET Projekte initialisiert, indem eine OWIN-Startklasse eingeschlossen wird. Stellen Sie sicher, dass Sie auf das NuGet-Paket Microsoft.Owin.Host.SystemWebverwiesen haben. Um diese Klasse in Visual Studio hinzuzufügen, klicken Sie mit der rechten Maustaste auf Ihr Serverprojekt, und wählen Sie "Neues Elementhinzufügen>" und dann "Web>General>OWIN Startup class" aus. Eine Klasse wird mit dem folgenden Attribut generiert:

[assembly: OwinStartup(typeof(YourServiceName.YourStartupClassName))]

Verwenden Sie in der Configuration() Methode Ihrer OWIN-Startklasse ein HttpConfiguration-Objekt , um die Azure Mobile Apps-Umgebung zu konfigurieren. Im folgenden Beispiel wird das Serverprojekt ohne hinzugefügte Features initialisiert:

// in OWIN startup class
public void Configuration(IAppBuilder app)
{
    HttpConfiguration config = new HttpConfiguration();

    new MobileAppConfiguration()
        // no added features
        .ApplyTo(config);

    app.UseWebApi(config);
}

Um einzelne Features zu aktivieren, müssen Sie Erweiterungsmethoden für das MobileAppConfiguration-Objekt aufrufen, bevor Sie ApplyTo aufrufen. Beispielsweise fügt der folgende Code während der Initialisierung allen API-Controllern, die das Attribut [MobileAppController] haben, die Standardrouten hinzu.

new MobileAppConfiguration()
    .MapApiControllers()
    .ApplyTo(config);

Die Serverschnellstartanleitung aus dem Azure-Portal ruft UseDefaultConfiguration(). Dies entspricht dem folgenden Setup:

    new MobileAppConfiguration()
        .AddMobileAppHomeController()             // from the Home package
        .MapApiControllers()
        .AddTables(                               // from the Tables package
            new MobileAppTableConfiguration()
                .MapTableControllers()
                .AddEntityFramework()             // from the Entity package
            )
        .AddPushNotifications()                   // from the Notifications package
        .MapLegacyCrossDomainController()         // from the CrossDomain package
        .ApplyTo(config);

Die verwendeten Erweiterungsmethoden sind:

  • AddMobileAppHomeController() stellt die Standardmäßige Startseite von Azure Mobile Apps bereit.
  • MapApiControllers() stellt benutzerdefinierte API-Funktionen für WebAPI-Controller bereit, die mit dem [MobileAppController] Attribut versehen sind.
  • AddTables() stellt eine Zuordnung der /tables Endpunkte zu Tabellencontrollern bereit.
  • AddTablesWithEntityFramework() ist eine Kurzform für die Abbildung der /tables-Endpunkte mithilfe von auf dem Entity Framework basierenden Controllern.
  • AddPushNotifications() bietet eine einfache Methode zum Registrieren von Geräten für Benachrichtigungshubs.
  • MapLegacyCrossDomainController() stellt standardmäßige CORS-Header für die lokale Entwicklung bereit.

SDK-Erweiterungen

Die folgenden NuGet-basierten Erweiterungspakete bieten verschiedene mobile Features, die von Ihrer Anwendung verwendet werden können. Sie aktivieren Erweiterungen während der Initialisierung mithilfe des MobileAppConfiguration-Objekts .

  • Microsoft.Azure.Mobile.Server.Quickstart Unterstützt das grundlegende Setup mobiler Apps. Die Konfiguration wird durch Aufrufen der UseDefaultConfiguration-Erweiterungsmethode während der Initialisierung hinzugefügt. Diese Erweiterung umfasst die folgenden Erweiterungen: Benachrichtigungen, Authentifizierung, Entität, Tabellen, domänenübergreifende und Home-Pakete. Dieses Paket wird vom Schnellstart für mobile Apps verwendet, der im Azure-Portal verfügbar ist.
  • Microsoft.Azure.Mobile.Server.Home Implementiert die Standardseite "Diese mobile App ist betriebsbereit" für den Websitestamm. Fügen Sie zur Konfiguration hinzu, indem Sie die Erweiterungsmethode "AddMobileAppHomeController " aufrufen.
  • Microsoft.Azure.Mobile.Server.Tables enthält Klassen zum Arbeiten mit Daten und richtet die Datenpipeline ein. Erweitern Sie die Konfiguration, indem Sie die AddTables-Erweiterungsmethode aufrufen.
  • Microsoft.Azure.Mobile.Server.Entity Ermöglicht dem Entity Framework den Zugriff auf Daten in der SQL-Datenbank. Fügen Sie die Konfiguration hinzu, indem Sie die AddTablesWithEntityFramework-Erweiterungsmethode aufrufen.
  • Microsoft.Azure.Mobile.Server.Authentication Aktiviert die Authentifizierung und richtet die OWIN-Middleware ein, die zum Überprüfen von Token verwendet wird. Fügen Sie der Konfiguration Elemente hinzu, indem Sie die Erweiterungsmethoden AddAppServiceAuthentication und IAppBuilder.UseAppServiceAuthentication aufrufen.
  • Microsoft.Azure.Mobile.Server.Notifications Aktiviert Pushbenachrichtigungen und definiert einen Pushregistrierungsendpunkt. Erweitern Sie die Konfiguration, indem Sie die Erweiterungsmethode AddPushNotifications aufrufen.
  • Microsoft.Azure.Mobile.Server.CrossDomain Erstellt einen Controller, der Daten für ältere Webbrowser aus Ihrer mobilen App liefert. Fügen Sie die Konfiguration hinzu, indem Sie die MapLegacyCrossDomainController-Erweiterungsmethode aufrufen.
  • Microsoft.Azure.Mobile.Server.Login stellt die AppServiceLoginHandler.CreateToken()-Methode bereit, eine statische Methode, die speziell bei benutzerdefinierten Authentifizierungsszenarien verwendet wird.

Vorgehensweise: Veröffentlichen des Serverprojekts

In diesem Abschnitt erfahren Sie, wie Sie Ihr .NET-Back-End-Projekt aus Visual Studio veröffentlichen. Sie können Ihr Back-End-Projekt auch mit Git oder einer der anderen dort verfügbaren Methoden bereitstellen.

  1. Erstellen Sie in Visual Studio das Projekt neu, um NuGet-Pakete wiederherzustellen.

  2. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf das Projekt, und klicken Sie auf "Veröffentlichen". Beim ersten Veröffentlichen müssen Sie ein Veröffentlichungsprofil definieren. Wenn Sie bereits ein Profil definiert haben, können Sie es auswählen und auf "Veröffentlichen" klicken.

  3. Wenn Sie aufgefordert werden, ein Veröffentlichungsziel auszuwählen, klicken Sie auf "Microsoft Azure App Service>Next", und melden Sie sich (falls erforderlich) mit Ihren Azure-Anmeldeinformationen an. Visual Studio lädt Ihre Veröffentlichungseinstellungen herunter und speichert sie sicher direkt aus Azure.

  4. Wählen Sie Ihr Abonnement aus, wählen Sie den Ressourcentyp aus der Ansicht aus, klappen Sie die Mobile App aus und klicken Sie dann auf Ihr Mobile App-Backend. Klicken Sie anschließend auf OK.

  5. Überprüfen Sie die Veröffentlichungsprofilinformationen, und klicken Sie auf "Veröffentlichen".

    Wenn Ihr Mobile App-Back-End erfolgreich veröffentlicht wurde, wird eine Startseite angezeigt, die den Erfolg angibt.

Vorgehensweise: Definieren eines Tabellencontrollers

Definieren Sie einen Tabellencontroller, um eine SQL-Tabelle für mobile Clients verfügbar zu machen. Das Konfigurieren eines Tabellencontrollers erfordert drei Schritte:

  1. Erstellen Sie eine DTO-Klasse (Data Transfer Object).
  2. Konfigurieren Sie einen Tabellenverweis in der Mobile DbContext-Klasse.
  3. Erstellen Sie einen Tabellencontroller.

Ein Data Transfer Object (DTO) ist ein einfaches C#-Objekt, das von EntityData. Beispiel:

public class TodoItem : EntityData
{
    public string Text { get; set; }
    public bool Complete {get; set;}
}

Das DTO wird verwendet, um die Tabelle in der SQL-Datenbank zu definieren. Um den Datenbankeintrag zu erstellen, fügen Sie der verwendeten DbContext-Eigenschaft eine DbSet<> Eigenschaft hinzu. In der Standardprojektvorlage für Azure Mobile Apps wird dbContext aufgerufen Models\MobileServiceContext.cs:

public class MobileServiceContext : DbContext
{
    private const string connectionStringName = "Name=MS_TableConnectionString";

    public MobileServiceContext() : base(connectionStringName)
    {

    }

    public DbSet<TodoItem> TodoItems { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Conventions.Add(
            new AttributeToColumnAnnotationConvention<TableColumnAttribute, string>(
                "ServiceColumnTable", (property, attributes) => attributes.Single().ColumnType.ToString()));
    }
}

Wenn Sie das Azure SDK installiert haben, können Sie jetzt einen Vorlagentabellencontroller wie folgt erstellen:

  1. Klicken Sie mit der rechten Maustaste auf den Ordner "Controller", und wählen Sie "Controller hinzufügen>..." aus.
  2. Wählen Sie die Azure Mobile Apps-Tabellencontroller-Option aus, und klicken Sie dann auf "Hinzufügen".
  3. Im Dialogfeld "Controller hinzufügen ":
    • Wählen Sie im Dropdownmenü " Modellklasse " Ihre neue DTO aus.
    • Wählen Sie in der DbContext-Dropdownliste die DbContext-Klasse für Mobile Service aus.
    • Der Controllername wird für Sie erstellt.
  4. Klicken Sie auf Hinzufügen.

Das Schnellstartserverprojekt enthält ein Beispiel für einen einfachen TodoItemController.

So passen Sie die Seitengröße der Tabelle an

Standardmäßig gibt Azure Mobile Apps 50 Datensätze pro Anforderung zurück. Durch Paging wird sichergestellt, dass der Client weder seinen Benutzeroberflächen-Thread noch den Server zu lange blockiert und so ein gutes Nutzererlebnis gewährleistet. Um die Tabellenseitengröße zu ändern, vergrößern Sie die serverseitige "zulässige Abfragegröße" und die clientseitige Seitengröße Die serverseitige "zulässige Abfragegröße" wird mithilfe des EnableQuery Attributs angepasst:

[EnableQuery(PageSize = 500)]

Stellen Sie sicher, dass die PageSize-Größe identisch oder größer ist als die vom Client angeforderte Größe. Ausführliche Informationen zum Ändern der Clientseitengröße finden Sie in der spezifischen Client-HOWTO-Dokumentation.

Vorgehensweise: Definieren eines benutzerdefinierten API-Controllers

Der benutzerdefinierte API-Controller bietet die grundlegendsten Funktionen für Ihr Mobile App-Back-End, indem ein Endpunkt verfügbar ist. Sie können einen mobilen API-Controller mithilfe des [MobileAppController]-Attributs registrieren. Das MobileAppController Attribut registriert die Route, richtet den JSON-Serializer für mobile Apps ein und aktiviert die Clientversionsprüfung.

  1. Klicken Sie in Visual Studio mit der rechten Maustaste auf den Ordner Controllers, dann auf Add>Controller, wählen Sie Web-API 2 Controller—Leer aus, und klicken Sie auf Add.

  2. Geben Sie einen Controllernamen an, z CustomController. B. auf "Hinzufügen".

  3. Fügen Sie in der neuen Controllerklassendatei die folgende using-Anweisung hinzu:

     using Microsoft.Azure.Mobile.Server.Config;
    
  4. Wenden Sie das [MobileAppController] -Attribut auf die API-Controllerklassendefinition an, wie im folgenden Beispiel gezeigt:

     [MobileAppController]
     public class CustomController : ApiController
     {
           //...
     }
    
  5. Fügen Sie in App_Start/Startup.MobileApp.cs Datei einen Aufruf der MapApiControllers-Erweiterungsmethode hinzu, wie im folgenden Beispiel gezeigt:

     new MobileAppConfiguration()
         .MapApiControllers()
         .ApplyTo(config);
    

Sie können auch die UseDefaultConfiguration()-Erweiterungsmethode anstelle von MapApiControllers() verwenden. Auf jeden Controller, auf den MobileAppControllerAttribute nicht angewendet wurde, kann weiterhin von Clients zugegriffen werden, es kann jedoch nicht ordnungsgemäß von Clients verwendet werden, die ein Mobile App-Client-SDK verwenden.

Vorgehensweise: Arbeiten mit Authentifizierung

Azure Mobile Apps verwendet die App Service-Authentifizierung/Autorisierung, um Ihr mobiles Back-End zu sichern. In diesem Abschnitt wird gezeigt, wie Sie die folgenden authentifizierungsbezogenen Aufgaben in Ihrem .NET-Back-End-Serverprojekt ausführen:

Vorgehensweise: Hinzufügen der Authentifizierung zu einem Serverprojekt

Sie können Ihrem Serverprojekt Authentifizierung hinzufügen, indem Sie das MobileAppConfiguration-Objekt erweitern und die OWIN-Middleware konfigurieren. Wenn Sie das Microsoft.Azure.Mobile.Server.Quickstart-Paket installieren und die UseDefaultConfiguration-Erweiterungsmethode aufrufen, können Sie mit Schritt 3 fortfahren.

  1. Installieren Sie in Visual Studio das Paket "Microsoft.Azure.Mobile.Server.Authentication ".

  2. Fügen Sie in der Projektdatei Startup.cs die folgende Codezeile am Anfang der Konfigurationsmethode hinzu:

     app.UseAppServiceAuthentication(config);
    

    Diese OWIN-Middlewarekomponente überprüft Token, die vom zugeordneten App Service-Gateway ausgestellt wurden.

  3. Fügen Sie das [Authorize] Attribut jedem Controller oder jeder Methode hinzu, der eine Authentifizierung erfordert.

Informationen zum Authentifizieren von Clients für Ihr Mobile Apps-Back-End finden Sie unter Hinzufügen der Authentifizierung zu Ihrer App.

Vorgehensweise: Verwenden der benutzerdefinierten Authentifizierung für Ihre Anwendung

Von Bedeutung

Um die benutzerdefinierte Authentifizierung zu aktivieren, müssen Sie zuerst die App-Dienstauthentifizierung aktivieren, ohne einen Anbieter für Ihren App-Dienst im Azure-Portal auszuwählen. Dadurch wird die WEBSITE_AUTH_SIGNING_KEY Umgebungsvariable aktiviert, wenn sie gehostet wird.

Wenn Sie keinen der App Service-Authentifizierungs-/Autorisierungsanbieter verwenden möchten, können Sie Ihr eigenes Anmeldesystem implementieren. Installieren Sie das Microsoft.Azure.Mobile.Server.Login-Paket , um die Generierung von Authentifizierungstoken zu unterstützen. Geben Sie Ihren eigenen Code für die Überprüfung von Benutzeranmeldeinformationen an. Sie können beispielsweise auf gesalzene und hashierte Kennwörter in einer Datenbank überprüfen. Im folgenden Beispiel ist die isValidAssertion() Methode (an anderer Stelle definiert) für diese Prüfungen verantwortlich.

Die benutzerdefinierte Authentifizierung wird durch das Erstellen eines ApiControllers und das Offenlegen der register und login Aktionen bereitgestellt. Der Client sollte eine benutzerdefinierte Benutzeroberfläche verwenden, um die Informationen vom Benutzer zu sammeln. Die Informationen werden dann mit einem standardmäßigen HTTP POST-Aufruf an die API übermittelt. Sobald der Server die Assertion überprüft, wird mithilfe der AppServiceLoginHandler.CreateToken() Methode ein Token ausgegeben. Der ApiController sollte das [MobileAppController] Attribut nicht verwenden.

Beispielaktion login :

    public IHttpActionResult Post([FromBody] JObject assertion)
    {
        if (isValidAssertion(assertion)) // user-defined function, checks against a database
        {
            JwtSecurityToken token = AppServiceLoginHandler.CreateToken(new Claim[] { new Claim(JwtRegisteredClaimNames.Sub, assertion["username"]) },
                mySigningKey,
                myAppURL,
                myAppURL,
                TimeSpan.FromHours(24) );
            return Ok(new LoginResult()
            {
                AuthenticationToken = token.RawData,
                User = new LoginResultUser() { UserId = userName.ToString() }
            });
        }
        else // user assertion was not valid
        {
            return this.Request.CreateUnauthorizedResponse();
        }
    }

Im vorherigen Beispiel sind LoginResult und LoginResultUser serialisierbare Objekte, die erforderliche Eigenschaften verfügbar geben. Der Client erwartet, dass Anmeldeantworten als JSON-Objekte des Formulars zurückgegeben werden:

    {
        "authenticationToken": "<token>",
        "user": {
            "userId": "<userId>"
        }
    }

Die AppServiceLoginHandler.CreateToken() Methode enthält eine Zielgruppe und einen Ausstellerparameter . Beide Parameter werden mithilfe des HTTPS-Schemas auf die URL Ihres Anwendungsstamms festgelegt. Ebenso sollten Sie "secretKey" auf den Wert des Signaturschlüssels Ihrer Anwendung festlegen. Verteilen Sie den Signaturschlüssel nicht in einem Client, da er zum Erstellen von Schlüsseln und zum Imitieren von Benutzern verwendet werden kann. Sie können den Signaturschlüssel abrufen, während er in App Service gehostet wird, indem Sie auf die umgebungsvariable WEBSITE_AUTH_SIGNING_KEY verweisen. Befolgen Sie bei Bedarf in einem lokalen Debugkontext die Anweisungen im Abschnitt "Lokales Debuggen mit Authentifizierung ", um den Schlüssel abzurufen und als Anwendungseinstellung zu speichern.

Das ausgestellte Token kann auch andere Ansprüche und ein Ablaufdatum enthalten. Minimal muss das ausgestellte Token einen Subjekt (sub) Anspruch enthalten.

Sie können die standardmäßige Clientmethode loginAsync() unterstützen, indem Sie die Authentifizierungsroute überladen. Wenn der Client client.loginAsync('custom'); anruft, um sich anzumelden, muss /.auth/login/custom Ihre Route sein. Sie können die Route für den benutzerdefinierten Authentifizierungscontroller mithilfe von MapHttpRoute():

config.Routes.MapHttpRoute("custom", ".auth/login/custom", new { controller = "CustomAuth" });

Tipp

Durch die Verwendung des loginAsync() Ansatzes wird sichergestellt, dass das Authentifizierungstoken jedem nachfolgenden Aufruf des Diensts zugeordnet ist.

Anleitung: Abrufen authentifizierter Benutzerinformationen

Wenn ein Benutzer von App Service authentifiziert wird, können Sie auf die zugewiesene Benutzer-ID und andere Informationen in Ihrem .NET-Back-End-Code zugreifen. Die Benutzerinformationen können zum Treffen von Autorisierungsentscheidungen im Back-End verwendet werden. Der folgende Code ruft die Benutzer-ID ab, die einer Anforderung zugeordnet ist:

// Get the SID of the current user.
var claimsPrincipal = this.User as ClaimsPrincipal;
string sid = claimsPrincipal.FindFirst(ClaimTypes.NameIdentifier).Value;

Die SID wird von der anbieterspezifischen Benutzer-ID abgeleitet und ist statisch für einen bestimmten Benutzer- und Anmeldeanbieter. Die SID ist null für ungültige Authentifizierungstoken.

Mit App Service können Sie auch bestimmte Ansprüche von Ihrem Anmeldeanbieter anfordern. Jeder Identitätsanbieter kann weitere Informationen über das Identitätsanbieter-SDK bereitstellen. Sie können beispielsweise die Facebook Graph-API für Freundesinformationen verwenden. Sie können Ansprüche angeben, die im Anbieterblatt im Azure-Portal angefordert werden. Für einige Ansprüche ist eine zusätzliche Konfiguration mit dem Identitätsanbieter erforderlich.

Der folgende Code ruft die GetAppServiceIdentityAsync-Erweiterungsmethode auf, um die Anmeldeinformationen abzurufen, einschließlich des Zugriffstokens, das zum Senden von Anforderungen an die Facebook Graph-API erforderlich ist:

// Get the credentials for the logged-in user.
var credentials =
    await this.User
    .GetAppServiceIdentityAsync<FacebookCredentials>(this.Request);

if (credentials.Provider == "Facebook")
{
    // Create a query string with the Facebook access token.
    var fbRequestUrl = "https://graph.facebook.com/me/feed?access_token="
        + credentials.AccessToken;

    // Create an HttpClient request.
    var client = new System.Net.Http.HttpClient();

    // Request the current user info from Facebook.
    var resp = await client.GetAsync(fbRequestUrl);
    resp.EnsureSuccessStatusCode();

    // Do something here with the Facebook user information.
    var fbInfo = await resp.Content.ReadAsStringAsync();
}

Fügen Sie eine using-Anweisung für System.Security.Principal hinzu, um die Erweiterungsmethode GetAppServiceIdentityAsync bereitzustellen.

Vorgehensweise: Einschränken des Datenzugriffs für autorisierte Benutzer

Im vorherigen Abschnitt haben wir gezeigt, wie die Benutzer-ID eines authentifizierten Benutzers abgerufen wird. Sie können den Zugriff auf Daten und andere Ressourcen basierend auf diesem Wert einschränken. Beispielsweise ist das Hinzufügen einer UserId-Spalte zu Tabellen und das Filtern der Abfrageergebnisse nach der Benutzer-ID eine einfache Möglichkeit, zurückgegebene Daten nur auf autorisierte Benutzer zu beschränken. Der folgende Code gibt Datenzeilen nur dann zurück, wenn die SID mit dem Wert in der Spalte "UserId" in der Tabelle "TodoItem" übereinstimmt:

// Get the SID of the current user.
var claimsPrincipal = this.User as ClaimsPrincipal;
string sid = claimsPrincipal.FindFirst(ClaimTypes.NameIdentifier).Value;

// Only return data rows that belong to the current user.
return Query().Where(t => t.UserId == sid);

Die Query() Methode gibt einen IQueryable Wert zurück, der von LINQ bearbeitet werden kann, um die Filterung zu verarbeiten.

Vorgehensweise: Hinzufügen von Pushbenachrichtigungen zu einem Serverprojekt

Fügen Sie Ihrem Serverprojekt Pushbenachrichtigungen hinzu, indem Sie das MobileAppConfiguration-Objekt erweitern und einen Notification Hubs-Client erstellen.

  1. Klicken Sie in Visual Studio mit der rechten Maustaste auf das Serverprojekt, und klicken Sie auf NuGet-Pakete verwalten, suchen Sie nach Microsoft.Azure.Mobile.Server.Notifications, und klicken Sie dann auf Installieren.

  2. Wiederholen Sie diesen Schritt, um das Microsoft.Azure.NotificationHubs Paket zu installieren, das die Clientbibliothek für Benachrichtigungshubs enthält.

  3. Fügen Sie in App_Start/Startup.MobileApp.cs einen Aufruf der AddPushNotifications() -Erweiterungsmethode während der Initialisierung hinzu:

     new MobileAppConfiguration()
         // other features...
         .AddPushNotifications()
         .ApplyTo(config);
    
  4. Fügen Sie den folgenden Code hinzu, der einen Notification Hubs-Client erstellt:

     // Get the settings for the server project.
     HttpConfiguration config = this.Configuration;
     MobileAppSettingsDictionary settings =
         config.GetMobileAppSettingsProvider().GetMobileAppSettings();
    
     // Get the Notification Hubs credentials for the Mobile App.
     string notificationHubName = settings.NotificationHubName;
     string notificationHubConnection = settings
         .Connections[MobileAppSettingsKeys.NotificationHubConnectionString].ConnectionString;
    
     // Create a new Notification Hub client.
     NotificationHubClient hub = NotificationHubClient
         .CreateClientFromConnectionString(notificationHubConnection, notificationHubName);
    

Sie können jetzt den Notification Hubs-Client verwenden, um Pushbenachrichtigungen an registrierte Geräte zu senden. Weitere Informationen finden Sie unter Hinzufügen von Pushbenachrichtigungen zu Ihrer App. Weitere Informationen zu Benachrichtigungshubs finden Sie unter "Notification Hubs Overview".

So wird's gemacht: Gezielte Push-Benachrichtigungen mit Tags aktivieren

Mithilfe von Benachrichtigungshubs können Sie gezielte Benachrichtigungen mithilfe von Tags an bestimmte Registrierungen senden. Mehrere Tags werden automatisch erstellt:

  • Die Installations-ID identifiziert ein bestimmtes Gerät.
  • Die Benutzer-ID basierend auf der authentifizierten SID identifiziert einen bestimmten Benutzer.

Auf die Installations-ID kann über die installationId-Eigenschaft im MobileServiceClient zugegriffen werden. Das folgende Beispiel zeigt, wie Sie eine Installations-ID verwenden, um einer bestimmten Installation in Notification Hubs ein Tag hinzuzufügen:

hub.PatchInstallation("my-installation-id", new[]
{
    new PartialUpdateOperation
    {
        Operation = UpdateOperationType.Add,
        Path = "/tags",
        Value = "{my-tag}"
    }
});

Alle Tags, die während der Registrierung von Pushbenachrichtigungen vom Client bereitgestellt werden, werden beim Erstellen der Installation vom Back-End ignoriert. Damit ein Client der Installation Tags hinzufügen kann, müssen Sie eine benutzerdefinierte API erstellen, die Tags mithilfe des vorherigen Musters hinzufügt.

Ein Beispiel finden Sie im abgeschlossenen Schnellstart-Beispiel für App Service Mobile Apps unter "Vom Client hinzugefügte Push-Benachrichtigungstags".

Vorgehensweise: Senden von Pushbenachrichtigungen an einen authentifizierten Benutzer

Wenn sich ein authentifizierter Benutzer für Pushbenachrichtigungen registriert, wird der Registrierung automatisch ein Benutzer-ID-Tag hinzugefügt. Mithilfe dieses Tags können Sie Pushbenachrichtigungen an alle Geräte senden, die von dieser Person registriert sind. Der folgende Code ruft die SID des Benutzers ab, der die Anforderung vornimmt, und sendet eine Vorlagen-Pushbenachrichtigung an jede Geräteregistrierung für diese Person:

// Get the current user SID and create a tag for the current user.
var claimsPrincipal = this.User as ClaimsPrincipal;
string sid = claimsPrincipal.FindFirst(ClaimTypes.NameIdentifier).Value;
string userTag = "_UserId:" + sid;

// Build a dictionary for the template with the item message text.
var notification = new Dictionary<string, string> { { "message", item.Text } };

// Send a template notification to the user ID.
await hub.SendTemplateNotificationAsync(notification, userTag);

Stellen Sie beim Registrieren für Pushbenachrichtigungen von einem authentifizierten Client sicher, dass die Authentifizierung abgeschlossen ist, bevor Sie die Registrierung versuchen. Weitere Informationen finden Sie unter Push an Benutzer im endgültigen Beispiel der Schnellstartanleitung für App Service Mobile Apps mit .NET-Backend.

Vorgehensweise: Debuggen und Behandeln von Problemen mit dem .NET Server SDK

Azure App Service bietet verschiedene Debugging- und Problembehandlungstechniken für ASP.NET Anwendungen:

Protokollierung

Sie können in die Diagnoseprotokolle des App Service schreiben, indem Sie die standardmäßige ASP.NET Ablaufverfolgung verwenden. Bevor Sie in die Protokolle schreiben können, müssen Sie die Diagnose in Ihrem Mobilen App-Back-End aktivieren.

So aktivieren Sie Diagnosefunktionen und schreiben in die Protokolle:

  1. Führen Sie die Schritte unter Aktivieren der Anwendungsprotokollierung (Windows) aus.

  2. Fügen Sie die folgende using-Direktive in Ihre Codedatei ein.

     using System.Web.Http.Tracing;
    
  3. Erstellen Sie einen Ablaufverfolgungs-Writer zum Schreiben aus dem .NET-Back-End in die Diagnoseprotokolle wie folgt:

     ITraceWriter traceWriter = this.Configuration.Services.GetTraceWriter();
     traceWriter.Info("Hello, World");
    
  4. Veröffentlichen Sie Ihr Serverprojekt erneut, und greifen Sie auf das Mobile App-Back-End zu, um den Codepfad mit der Protokollierung auszuführen.

  5. Laden Sie die Protokolle herunter, und bewerten Sie sie, wie in Access-Protokolldateien beschrieben.

Lokales Debuggen mit Authentifizierung

Sie können Ihre Anwendung lokal ausführen, um Änderungen zu testen, bevor Sie sie in der Cloud veröffentlichen. Drücken Sie F5 für die meisten Azure Mobile Apps-Back-Ends in Visual Studio. Bei der Verwendung der Authentifizierung gibt es jedoch einige zusätzliche Überlegungen.

Sie müssen über eine cloudbasierte mobile App verfügen, für die die App-Dienstauthentifizierung/Autorisierung konfiguriert ist, und Ihr Client muss den Cloudendpunkt als alternativer Anmeldehost angegeben haben. Die spezifischen Schritte, die erforderlich sind, finden Sie in der Dokumentation für Ihre Clientplattform.

Stellen Sie sicher, dass Ihr mobiles Back-End "Microsoft.Azure.Mobile.Server.Authentication " installiert ist. Fügen Sie in der OWIN-Startklasse Ihrer Anwendung Folgendes hinzu, nachdem MobileAppConfiguration auf Ihre HttpConfiguration angewendet wurde:

    app.UseAppServiceAuthentication(new AppServiceAuthenticationOptions()
    {
        SigningKey = ConfigurationManager.AppSettings["authSigningKey"],
        ValidAudiences = new[] { ConfigurationManager.AppSettings["authAudience"] },
        ValidIssuers = new[] { ConfigurationManager.AppSettings["authIssuer"] },
        TokenHandler = config.GetAppServiceTokenHandler()
    });

Im vorherigen Beispiel sollten Sie die Anwendungseinstellungen "authAudience " und "authIssuer " in Ihrer Web.config Datei so konfigurieren, dass es sich dabei um die URL Des Anwendungsstamms mit dem HTTPS-Schema handeln soll. Ebenso sollten Sie "authSigningKey " auf den Wert des Signaturschlüssels Ihrer Anwendung festlegen. So rufen Sie den Signaturschlüssel ab:

  1. Navigieren Sie im Azure-Portal zu Ihrer App.
  2. Klicken Sie auf Extras, Kudu, Go.
  3. Klicken Sie auf der Kudu-Verwaltungswebsite auf "Umgebung".
  4. Suchen Sie den Wert für WEBSITE_AUTH_SIGNING_KEY.

Verwenden Sie den Signaturschlüssel für den Parameter "authSigningKey " in der lokalen Anwendungskonfiguration. Ihr mobiles Back-End ist jetzt ausgestattet, um Token zu validieren, wenn sie lokal ausgeführt werden, wodurch der Client das Token vom cloudbasierten Endpunkt abruft.