Delen via


Werken met de SDK voor de .NET-back-endserver voor Azure Mobile Apps

In dit onderwerp wordt beschreven hoe u de SDK van de .NET-back-endserver gebruikt in belangrijke Azure App Service Mobile Apps-scenario's. De Azure Mobile Apps SDK helpt u bij het werken met mobiele clients vanuit uw ASP.NET-toepassing.

Tip

De .NET-server-SDK voor Azure Mobile Apps is open source op GitHub. De opslagplaats bevat alle broncode, inclusief de volledige server-SDK-eenheidstestsuite en enkele voorbeeldprojecten.

Referentiedocumentatie

De referentiedocumentatie voor de server-SDK bevindt zich hier: Azure Mobile Apps .NET Reference.

Procedure: Een back-end voor mobiele .NET-apps maken

Als u een nieuw project start, kunt u een App Service toepassing maken met behulp van de Azure Portal of Visual Studio. U kunt de App Service-toepassing lokaal uitvoeren of het project publiceren naar uw mobiele App Service cloud-app.

Als u mobiele mogelijkheden aan een bestaand project toevoegt, raadpleegt u de sectie Sdk downloaden en initialiseren .

Een .NET-back-end maken met behulp van de Azure Portal

Als u een App Service mobiele back-end wilt maken, volgt u de quickstart-zelfstudie of volgt u deze stappen:

  1. Meld u aan bij Azure Portal.

  2. Selecteer +NEW>Web + Mobile Mobile>App en geef vervolgens een naam op voor de back-end van Mobile Apps.

  3. Voor de resourcegroep selecteert u een bestaande resourcegroep of maakt u een nieuwe resourcegroep (met dezelfde naam als uw app).

  4. Voor App Service abonnement is het standaardabonnement (in de standard-laag) geselecteerd. U kunt ook een ander plan selecteren of een nieuw plan maken.

    De instellingen van het App Service-plan bepalen de locatie, functies, kosten en rekenresources die aan uw app zijn gekoppeld. Zie voor meer informatie over App Service abonnementen en het maken van een nieuw abonnement in een andere prijscategorie en op de gewenste locatie Azure App Service overzicht van abonnementen.

  5. Selecteer Maken. Met deze stap maakt u de back-end van Mobile Apps.

  6. Selecteer in het deelvenster Instellingen voor de nieuwe back-end van Mobile Apps de optie Snel aan de slag met> het client-app-platform >Verbinding maken met een database.

    Selecties voor het verbinden van een database

  7. Selecteer in het deelvenster Gegevensverbinding toevoegenSQL Database>Een nieuwe database maken. Voer de databasenaam in, kies een prijscategorie en selecteer Vervolgens Server. U kunt deze nieuwe database opnieuw gebruiken. Als u al een database op dezelfde locatie hebt, kunt u in plaats daarvan Een bestaande database gebruiken kiezen. Het gebruik van een database op een andere locatie wordt niet aanbevolen vanwege de bandbreedtekosten en een hogere latentie.

    Een database selecteren

  8. Voer in het deelvenster Nieuwe server een unieke servernaam in het vak Servernaam in, geef een aanmelding en wachtwoord op, selecteer Azure-services toegang geven tot de server en selecteer OK. Met deze stap maakt u de nieuwe database.

  9. Selecteer in het deelvenster Gegevensverbinding toevoegende verbindingsreeks, voer de aanmeldings- en wachtwoordwaarden voor uw database in en selecteer OK.

    Wacht enkele minuten totdat de database is geïmplementeerd voordat u doorgaat.

Ga terug naar de blade Aan de slag en kies onder Een tabel-API maken C# als uw back-endtaal. Klik op Downloaden, pak de gecomprimeerde projectbestanden uit op uw lokale computer en open de oplossing in Visual Studio.

Een .NET-back-end maken met Visual Studio 2017

Installeer de Azure-workload via het Visual Studio-installatieprogramma om vanuit Visual Studio te publiceren naar het Azure Mobile Apps-project. Nadat u de SDK hebt geïnstalleerd, maakt u een ASP.NET toepassing met behulp van de volgende stappen:

  1. Het dialoogvenster Nieuw project openen (vanuit Bestand>nieuw>project...).
  2. Vouw Visual C# uit en selecteer Web.
  3. Selecteer ASP.NET webtoepassing (.NET Framework).
  4. Vul de projectnaam in. Klik vervolgens op OK.
  5. Selecteer azure Mobile App in de lijst met sjablonen.
  6. Klik op OK om de oplossing te maken.
  7. Klik met de rechtermuisknop op het project in de Solution Explorer en kies Publiceren.... Kies vervolgens App Service als publicatiedoel.
  8. Volg de aanwijzingen om te verifiëren en een nieuwe of bestaande Azure App Service te kiezen om te publiceren.

Een .NET-back-end maken met Visual Studio 2015

Installeer de Azure SDK voor .NET (versie 2.9.0 of hoger) om een Azure Mobile Apps-project te maken in Visual Studio. Nadat u de SDK hebt geïnstalleerd, maakt u een ASP.NET toepassing met behulp van de volgende stappen:

  1. Het dialoogvenster Nieuw project openen (vanuit Bestand>nieuw>project...).
  2. VouwVisual C#van sjablonen> uit en selecteer Web.
  3. Selecteer ASP.NET-webtoepassing.
  4. Vul de projectnaam in. Klik vervolgens op OK.
  5. Selecteer azure Mobile Apponder ASP.NET 4.5.2-sjablonen. Controleer Host in de cloud om een mobiele back-end te maken in de cloud waarnaar u dit project kunt publiceren.
  6. Klik op OK.

Procedure: de SDK downloaden en initialiseren

De SDK is beschikbaar op NuGet.org. Dit pakket bevat de basisfunctionaliteit die is vereist om aan de slag te gaan met de SDK. Als u de SDK wilt initialiseren, moet u acties uitvoeren op het HttpConfiguration-object .

De SDK installeren

Als u de SDK wilt installeren, klikt u met de rechtermuisknop op het serverproject in Visual Studio, selecteert u NuGet-pakketten beheren, zoekt u het pakket Microsoft.Azure.Mobile.Server en klikt u vervolgens op Installeren.

Het serverproject initialiseren

Een .NET-back-endserverproject wordt geïnitialiseerd, vergelijkbaar met andere ASP.NET projecten, door een OWIN-opstartklasse op te geven. Zorg ervoor dat u naar het NuGet-pakket Microsoft.Owin.Host.SystemWebhebt verwezen. Als u deze klasse wilt toevoegen in Visual Studio, klikt u met de rechtermuisknop op uw serverproject en selecteert uNieuw itemtoevoegen> en selecteert u vervolgens De opstartklasse Web>General>OWIN. Er wordt een klasse gegenereerd met het volgende kenmerk:

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

Gebruik in de Configuration() methode van uw OWIN-opstartklasse een HttpConfiguration-object om de Azure Mobile Apps-omgeving te configureren. In het volgende voorbeeld wordt het serverproject geïnitialiseerd zonder toegevoegde functies:

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

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

    app.UseWebApi(config);
}

Als u afzonderlijke functies wilt inschakelen, moet u extensiemethoden aanroepen op het MobileAppConfiguration-object voordat u ApplyTo aanroept. Met de volgende code worden bijvoorbeeld de standaardroutes toegevoegd aan alle API-controllers die het kenmerk [MobileAppController] hebben tijdens de initialisatie:

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

De snelstartgids voor de server in het Azure Portal roept UseDefaultConfiguration()aan. Dit komt overeen met de volgende installatie:

    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);

De gebruikte extensiemethoden zijn:

  • AddMobileAppHomeController() biedt de standaard startpagina van Azure Mobile Apps.
  • MapApiControllers() biedt aangepaste API-mogelijkheden voor WebAPI-controllers die zijn ingericht met het [MobileAppController] kenmerk.
  • AddTables() biedt een toewijzing van de /tables eindpunten aan tabelcontrollers.
  • AddTablesWithEntityFramework() is een korte hand voor het toewijzen van de /tables eindpunten met behulp van op Entity Framework gebaseerde controllers.
  • AddPushNotifications() biedt een eenvoudige methode voor het registreren van apparaten voor Notification Hubs.
  • MapLegacyCrossDomainController() biedt standaard CORS-headers voor lokale ontwikkeling.

SDK-extensies

De volgende nuGet-extensiepakketten bieden verschillende mobiele functies die door uw toepassing kunnen worden gebruikt. U schakelt extensies in tijdens de initialisatie met behulp van het MobileAppConfiguration-object .

  • Microsoft.Azure.Mobile.Server.Quickstart ondersteunt de basisinstallatie van Mobile Apps. Toegevoegd aan de configuratie door de UseDefaultConfiguration-extensiemethode aan te roepen tijdens de initialisatie. Deze extensie omvat de volgende extensies: Meldingen, Verificatie, Entiteit, Tabellen, Meerdere domeinen en Start-pakketten. Dit pakket wordt gebruikt door de quickstart voor Mobile Apps die beschikbaar is op de Azure Portal.
  • Microsoft.Azure.Mobile.Server.Home Implementeert de standaardpagina van deze mobiele app voor de hoofdmap van de website. Voeg toe aan de configuratie door de extensiemethode AddMobileAppHomeController aan te roepen.
  • Microsoft.Azure.Mobile.Server.Tables bevat klassen voor het werken met gegevens en het instellen van de gegevenspijplijn. Voeg toe aan de configuratie door de extensiemethode AddTables aan te roepen.
  • Met Microsoft.Azure.Mobile.Server.Entity kan het Entity Framework toegang krijgen tot gegevens in de SQL Database. Voeg toe aan de configuratie door de extensiemethode AddTablesWithEntityFramework aan te roepen.
  • Microsoft.Azure.Mobile.Server.Authentication maakt verificatie mogelijk en stelt de OWIN-middleware in die wordt gebruikt om tokens te valideren. Voeg toe aan de configuratie door de AddAppServiceAuthentication en IAppBuilder aan te roepen. UseAppServiceAuthentication-extensiemethoden .
  • Microsoft.Azure.Mobile.Server.Notifications maakt pushmeldingen mogelijk en definieert een eindpunt voor pushregistratie. Voeg toe aan de configuratie door de extensiemethode AddPushNotifications aan te roepen.
  • Microsoft.Azure.Mobile.Server.CrossDomain maakt een controller die gegevens levert aan verouderde webbrowsers vanuit uw mobiele app. Voeg toe aan de configuratie door de extensiemethode MapLegacyCrossDomainController aan te roepen.
  • Microsoft.Azure.Mobile.Server.Login biedt de methode AppServiceLoginHandler.CreateToken(), een statische methode die wordt gebruikt tijdens aangepaste verificatiescenario's.

Procedure: Het serverproject publiceren

In deze sectie wordt beschreven hoe u uw .NET-back-endproject publiceert vanuit Visual Studio. U kunt uw back-endproject ook implementeren met Git of een van de andere methoden die daar beschikbaar zijn.

  1. Bouw in Visual Studio het project opnieuw om NuGet-pakketten te herstellen.

  2. Klik in Solution Explorer met de rechtermuisknop op het project en klik op Publiceren. De eerste keer dat u publiceert, moet u een publicatieprofiel definiëren. Wanneer u al een profiel hebt gedefinieerd, kunt u dit selecteren en op Publiceren klikken.

  3. Als u wordt gevraagd een publicatiedoel te selecteren, klikt u op Microsoft Azure App Service>Volgend en (indien nodig) meldt u zich aan met uw Azure-referenties. Visual Studio downloadt en slaat uw publicatie-instellingen veilig op vanuit Azure.

  4. Kies uw abonnement, selecteer resourcetype in weergave, vouw de mobiele app uit en klik op de back-end van uw mobiele app en klik vervolgens op OK.

  5. Controleer de profielgegevens van het publiceren en klik op Publiceren.

    Wanneer de back-end van uw mobiele app is gepubliceerd, ziet u een landingspagina die aangeeft dat deze is geslaagd.

Procedure: Een tabelcontroller definiëren

Definieer een tabelcontroller om een SQL-tabel beschikbaar te maken voor mobiele clients. Voor het configureren van een tabelcontroller zijn drie stappen vereist:

  1. Maak een DTO-klasse (Data Transfer Object).
  2. Configureer een tabelreferentie in de klasse Mobile DbContext.
  3. Een tabelcontroller maken.

Een DTO (Data Transfer Object) is een gewoon C#-object dat overgaat van EntityData. Bijvoorbeeld:

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

De DTO wordt gebruikt om de tabel in de SQL-database te definiëren. Als u de databasevermelding wilt maken, voegt u een DbSet<> eigenschap toe aan de DbContext die u gebruikt. In de standaardprojectsjabloon voor Azure Mobile Apps wordt dbContext het volgende aangeroepen 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()));
    }
}

Als u de Azure SDK hebt geïnstalleerd, kunt u nu als volgt een sjabloontabelcontroller maken:

  1. Klik met de rechtermuisknop op de map Controllers en selecteer Controller toevoegen>....
  2. Selecteer de optie Tabelcontroller voor Azure Mobile Apps en klik vervolgens op Toevoegen.
  3. In het dialoogvenster Controller toevoegen :
    • Selecteer uw nieuwe DTO in de vervolgkeuzelijst Modelklasse .
    • Selecteer in de vervolgkeuzelijst DbContext de klasse Mobile Service DbContext.
    • De controllernaam wordt voor u gemaakt.
  4. Klik op Add.

Het quickstartserverproject bevat een voorbeeld voor een eenvoudige TodoItemController.

Procedure: De grootte van de tabelpaginering aanpassen

Azure Mobile Apps retourneert standaard 50 records per aanvraag. Paginering zorgt ervoor dat de client hun UI-thread en de server niet te lang koppelt, waardoor een goede gebruikerservaring wordt gegarandeerd. Als u de paginagrootte van de tabel wilt wijzigen, verhoogt u de 'toegestane querygrootte' aan de serverzijde en het paginaformaat aan de clientzijde De 'toegestane querygrootte' wordt aangepast met behulp van het EnableQuery kenmerk:

[EnableQuery(PageSize = 500)]

Zorg ervoor dat PageSize hetzelfde is of groter is dan de grootte die door de client is aangevraagd. Raadpleeg de specifieke client-PROCEDUREdocumentatie voor meer informatie over het wijzigen van het paginaformaat van de client.

Procedure: Een aangepaste API-controller definiëren

De aangepaste API-controller biedt de meest eenvoudige functionaliteit voor de back-end van uw mobiele app door een eindpunt beschikbaar te maken. U kunt een mobiele API-controller registreren met behulp van het kenmerk [MobileAppController]. Het MobileAppController kenmerk registreert de route, stelt de JSON-serializer voor Mobile Apps in en schakelt clientversiecontrole in.

  1. Klik in Visual Studio met de rechtermuisknop op de map Controllers en klik vervolgens opControllertoevoegen>, selecteer Web-API 2 Controller: leeg en klik op Toevoegen.

  2. Geef een controllernaam op, zoals CustomControlleren klik op Toevoegen.

  3. Voeg in het nieuwe controllerklassebestand de volgende using-instructie toe:

     using Microsoft.Azure.Mobile.Server.Config;
    
  4. Pas het kenmerk [MobileAppController] toe op de definitie van de API-controllerklasse, zoals in het volgende voorbeeld:

     [MobileAppController]
     public class CustomController : ApiController
     {
           //...
     }
    
  5. Voeg in het bestand App_Start/Startup.MobileApp.cs een aanroep toe aan de mapApiControllers-extensiemethode , zoals in het volgende voorbeeld:

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

U kunt ook de UseDefaultConfiguration() extensiemethode gebruiken in plaats van MapApiControllers(). Elke controller waarop MobileAppControllerAttribute niet is toegepast, kan nog steeds worden geopend door clients, maar het kan niet correct worden gebruikt door clients die gebruikmaken van een SDK voor de mobiele app-client.

Procedure: Werken met verificatie

Azure Mobile Apps maakt gebruik van App Service-verificatie/autorisatie om uw mobiele back-end te beveiligen. In deze sectie wordt beschreven hoe u de volgende verificatiegerelateerde taken uitvoert in uw .NET-back-endserverproject:

Procedure: Verificatie toevoegen aan een serverproject

U kunt verificatie toevoegen aan uw serverproject door het MobileAppConfiguration-object uit te breiden en OWIN-middleware te configureren. Wanneer u het pakket Microsoft.Azure.Mobile.Server.Quickstart installeert en de useDefaultConfiguration-extensiemethode aanroept, kunt u doorgaan naar stap 3.

  1. Installeer in Visual Studio het pakket Microsoft.Azure.Mobile.Server.Authentication .

  2. Voeg in het projectbestand Startup.cs de volgende coderegel toe aan het begin van de configuratiemethode :

     app.UseAppServiceAuthentication(config);
    

    Dit OWIN-middlewareonderdeel valideert tokens die zijn uitgegeven door de bijbehorende App Service-gateway.

  3. Voeg het [Authorize] kenmerk toe aan een controller of methode waarvoor verificatie is vereist.

Zie Verificatie toevoegen aan uw app voor meer informatie over het verifiëren van clients aan de back-end van Mobile Apps.

Procedure: Aangepaste verificatie gebruiken voor uw toepassing

Belangrijk

Als u aangepaste verificatie wilt inschakelen, moet u eerst App Service Verificatie inschakelen zonder een provider te selecteren voor uw App Service in de Azure Portal. Hierdoor wordt de omgevingsvariabele WEBSITE_AUTH_SIGNING_KEY ingeschakeld wanneer deze wordt gehost.

Als u geen van de App Service verificatie-/autorisatieproviders wilt gebruiken, kunt u uw eigen aanmeldingssysteem implementeren. Installeer het pakket Microsoft.Azure.Mobile.Server.Login om te helpen bij het genereren van verificatietoken. Geef uw eigen code op voor het valideren van gebruikersreferenties. U kunt bijvoorbeeld controleren op gezouten en gehashte wachtwoorden in een database. In het onderstaande voorbeeld is de isValidAssertion() methode (elders gedefinieerd) verantwoordelijk voor deze controles.

De aangepaste verificatie wordt weergegeven door een ApiController te maken en acties weer te geven en login uit te register voeren. De client moet een aangepaste gebruikersinterface gebruiken om de gegevens van de gebruiker te verzamelen. De informatie wordt vervolgens verzonden naar de API met een standaard HTTP POST-aanroep. Zodra de server de assertie valideert, wordt er een token uitgegeven met behulp van de AppServiceLoginHandler.CreateToken() methode. De ApiController mag het[MobileAppController] kenmerk niet gebruiken.

Een voorbeeldactie 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();
        }
    }

In het voorgaande voorbeeld zijn LoginResult en LoginResultUser serialiseerbare objecten die de vereiste eigenschappen weergeven. De client verwacht dat aanmeldingsreacties worden geretourneerd als JSON-objecten van het formulier:

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

De AppServiceLoginHandler.CreateToken() methode bevat een doelgroep en een parameter voor verleners . Beide parameters worden ingesteld op de URL van de hoofdmap van uw toepassing, met behulp van het HTTPS-schema. Op dezelfde manier moet u secretKey instellen als de waarde van de ondertekeningssleutel van uw toepassing. Distribueer de ondertekeningssleutel niet in een client, omdat deze kan worden gebruikt om sleutels te munten en gebruikers te imiteren. U kunt de ondertekeningssleutel verkrijgen terwijl deze wordt gehost in App Service door te verwijzen naar de omgevingsvariabele WEBSITE_AUTH_SIGNING_KEY. Als dat nodig is in een lokale foutopsporingscontext, volgt u de instructies in de sectie Lokale foutopsporing met verificatie om de sleutel op te halen en op te slaan als toepassingsinstelling.

Het uitgegeven token kan ook andere claims en een vervaldatum bevatten. Minimaal moet het uitgegeven token een onderwerpclaim (subclaim) bevatten.

U kunt de standaardclientmethode loginAsync() ondersteunen door de verificatieroute te overbelasten. Als de client wordt aanroepen client.loginAsync('custom'); om u aan te melden, moet uw route zijn /.auth/login/custom. U kunt de route voor de aangepaste verificatiecontroller instellen met behulp van MapHttpRoute():

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

Tip

Door de loginAsync() methode te gebruiken, zorgt u ervoor dat het verificatietoken wordt gekoppeld aan elke volgende aanroep van de service.

Procedure: geverifieerde gebruikersgegevens ophalen

Wanneer een gebruiker wordt geverifieerd door App Service, hebt u toegang tot de toegewezen gebruikers-id en andere informatie in uw .NET-back-endcode. De gebruikersgegevens kunnen worden gebruikt voor het nemen van autorisatiebeslissingen in de back-end. Met de volgende code wordt de gebruikers-id verkregen die is gekoppeld aan een aanvraag:

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

De SID wordt afgeleid van de providerspecifieke gebruikers-id en is statisch voor een bepaalde gebruiker en aanmeldingsprovider. De SID is null voor ongeldige verificatietokens.

App Service kunt u ook specifieke claims aanvragen bij uw aanmeldingsprovider. Elke id-provider kan meer informatie bieden met behulp van de SDK van de id-provider. U kunt bijvoorbeeld de Facebook-Graph API gebruiken voor informatie over vrienden. U kunt claims opgeven die worden aangevraagd op de blade provider in de Azure Portal. Voor sommige claims is aanvullende configuratie met de id-provider vereist.

Met de volgende code wordt de getAppServiceIdentityAsync-extensiemethode aangeroepen om de aanmeldingsreferenties op te halen, waaronder het toegangstoken dat nodig is om aanvragen te doen voor de Facebook-Graph API:

// 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();
}

Voeg een using-instructie toe voor System.Security.Principal het opgeven van de GetAppServiceIdentityAsync-extensiemethode .

Procedure: Gegevenstoegang beperken voor geautoriseerde gebruikers

In de vorige sectie hebben we laten zien hoe u de gebruikers-id van een geverifieerde gebruiker kunt ophalen. U kunt de toegang tot gegevens en andere resources beperken op basis van deze waarde. Het toevoegen van een kolom userId aan tabellen en het filteren van de queryresultaten op basis van de gebruikers-id is bijvoorbeeld een eenvoudige manier om geretourneerde gegevens alleen te beperken tot geautoriseerde gebruikers. Met de volgende code worden alleen gegevensrijen geretourneerd wanneer de SID overeenkomt met de waarde in de kolom UserId in de tabel TodoItem:

// 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);

De Query() methode retourneert een IQueryable methode die door LINQ kan worden bewerkt om filteren te verwerken.

Procedure: Pushmeldingen toevoegen aan een serverproject

Voeg pushmeldingen toe aan uw serverproject door het MobileAppConfiguration-object uit te breiden en een Notification Hubs-client te maken.

  1. Klik in Visual Studio met de rechtermuisknop op het serverproject en klik op NuGet-pakketten beheren, zoek Microsoft.Azure.Mobile.Server.Notificationsen klik vervolgens op Installeren.

  2. Herhaal deze stap om het Microsoft.Azure.NotificationHubs pakket te installeren, dat de Notification Hubs-clientbibliotheek bevat.

  3. Voeg in App_Start/Startup.MobileApp.cs een aanroep toe aan de extensiemethode AddPushNotifications() tijdens de initialisatie:

     new MobileAppConfiguration()
         // other features...
         .AddPushNotifications()
         .ApplyTo(config);
    
  4. Voeg de volgende code toe waarmee een Notification Hubs-client wordt gemaakt:

     // 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);
    

U kunt nu de Notification Hubs-client gebruiken om pushmeldingen te verzenden naar geregistreerde apparaten. Zie Add push notifications to your app (Pushmeldingen toevoegen aan uw app) voor meer informatie. Zie Het overzicht van Notification Hubs voor meer informatie over Notification Hubs.

Procedure: Gerichte push inschakelen met behulp van tags

Met Notification Hubs kunt u gerichte meldingen verzenden naar specifieke registraties met behulp van tags. Er worden automatisch verschillende tags gemaakt:

  • De installatie-id identificeert een specifiek apparaat.
  • De gebruikers-id op basis van de geverifieerde SID identificeert een specifieke gebruiker.

De installatie-id kan worden geopend vanuit de eigenschap installationId op de MobileServiceClient. In het volgende voorbeeld ziet u hoe u een installatie-id gebruikt om een tag toe te voegen aan een specifieke installatie in Notification Hubs:

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

Alle tags die tijdens de registratie van pushmeldingen door de client worden geleverd, worden genegeerd door de back-end bij het maken van de installatie. Als u wilt dat een client tags toevoegt aan de installatie, moet u een aangepaste API maken waarmee tags worden toegevoegd met behulp van het voorgaande patroon.

Zie door de client toegevoegde pushmeldingstags in het App Service voorbeeld van de voltooide quickstart voor Mobile Apps voor een voorbeeld.

Procedure: Pushmeldingen verzenden naar een geverifieerde gebruiker

Wanneer een geverifieerde gebruiker zich registreert voor pushmeldingen, wordt er automatisch een gebruikers-id-tag toegevoegd aan de registratie. Met deze tag kunt u pushmeldingen verzenden naar alle apparaten die door die persoon zijn geregistreerd. De volgende code haalt de SID op van de gebruiker die de aanvraag doet en verzendt een sjabloonpushmelding naar elke apparaatregistratie voor die persoon:

// 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);

Wanneer u zich registreert voor pushmeldingen van een geverifieerde client, moet u ervoor zorgen dat de verificatie is voltooid voordat u de registratie probeert uit te voeren. Zie Pushen naar gebruikers in het App Service QuickStart-voorbeeld voor de voltooide quickstart van Mobile Apps voor .NET-back-end voor meer informatie.

Procedure: Fouten opsporen en problemen met de .NET Server SDK oplossen

Azure App Service biedt verschillende foutopsporings- en probleemoplossingstechnieken voor ASP.NET toepassingen:

Logboekregistratie

U kunt schrijven naar App Service diagnostische logboeken met behulp van de standaard ASP.NET tracering. Voordat u naar de logboeken kunt schrijven, moet u diagnostische gegevens inschakelen in de back-end van uw mobiele app.

Diagnostische gegevens inschakelen en naar de logboeken schrijven:

  1. Volg de stappen in Toepassingslogboeken inschakelen (Windows).

  2. Voeg de volgende using-instructie toe in uw codebestand:

     using System.Web.Http.Tracing;
    
  3. Maak als volgt een traceerschrijver om van de .NET-back-end naar de diagnostische logboeken te schrijven:

     ITraceWriter traceWriter = this.Configuration.Services.GetTraceWriter();
     traceWriter.Info("Hello, World");
    
  4. Publiceer het serverproject opnieuw en open de back-end van de mobiele app om het codepad met de logboekregistratie uit te voeren.

  5. Download en evalueer de logboeken, zoals beschreven in Access-logboekbestanden.

Lokale foutopsporing met verificatie

U kunt uw toepassing lokaal uitvoeren om wijzigingen te testen voordat u ze publiceert naar de cloud. Voor de meeste Back-ends van Azure Mobile Apps drukt u op F5 in Visual Studio. Er zijn echter enkele aanvullende overwegingen bij het gebruik van verificatie.

U moet een mobiele app in de cloud hebben met App Service verificatie/autorisatie geconfigureerd en uw client moet het cloudeindpunt hebben opgegeven als alternatieve aanmeldingshost. Raadpleeg de documentatie voor uw clientplatform voor de specifieke stappen die nodig zijn.

Zorg ervoor dat op uw mobiele back-end Microsoft.Azure.Mobile.Server.Authentication is geïnstalleerd. Voeg vervolgens in de OWIN-opstartklasse van uw toepassing het volgende toe nadat MobileAppConfiguration deze is toegepast op uw HttpConfiguration:

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

In het voorgaande voorbeeld moet u de toepassingsinstellingen authAudience en authIssuer in uw Web.config-bestand configureren om elk de URL van de toepassingshoofdmap te zijn, met behulp van het HTTPS-schema. Op dezelfde manier moet u authSigningKey instellen als de waarde van de ondertekeningssleutel van uw toepassing. De ondertekeningssleutel verkrijgen:

  1. Navigeer naar uw app in de Azure Portal
  2. Klik op Extra, Kudu, Go.
  3. Klik op de Kudu-beheersite op Omgeving.
  4. Zoek de waarde voor WEBSITE_AUTH_SIGNING_KEY.

Gebruik de ondertekeningssleutel voor de parameter authSigningKey in de configuratie van uw lokale toepassing. Uw mobiele back-end is nu uitgerust om tokens te valideren wanneer ze lokaal worden uitgevoerd, waarmee de client het token verkrijgt van het cloudeindpunt.