Praca z zestawem SDK serwera zaplecza platformy .NET dla usługi Azure Mobile Apps

W tym temacie pokazano, jak używać zestawu SDK serwera zaplecza platformy .NET w kluczowych scenariuszach Azure App Service Mobile Apps. Zestaw SDK usługi Azure Mobile Apps ułatwia pracę z klientami mobilnymi z aplikacji ASP.NET.

Porada

Zestaw SDK serwera platformy .NET dla usługi Azure Mobile Apps jest open source w usłudze GitHub. Repozytorium zawiera cały kod źródłowy, w tym cały zestaw testów jednostkowych zestawu SDK serwera i niektóre przykładowe projekty.

Dokumentacja referencyjna

Dokumentacja referencyjna zestawu SDK serwera znajduje się tutaj: Dokumentacja platformy .NET usługi Azure Mobile Apps.

Instrukcje: tworzenie zaplecza aplikacji mobilnej .NET

Jeśli uruchamiasz nowy projekt, możesz utworzyć aplikację App Service przy użyciu Azure Portal lub Visual Studio. Aplikację App Service można uruchomić lokalnie lub opublikować projekt w aplikacji mobilnej App Service opartej na chmurze.

Jeśli dodasz funkcje mobilne do istniejącego projektu, zobacz sekcję Pobieranie i inicjowanie zestawu SDK .

Tworzenie zaplecza platformy .NET przy użyciu Azure Portal

Aby utworzyć zaplecze dla urządzeń przenośnych App Service, wykonaj samouczek Szybki start lub wykonaj następujące kroki:

  1. Zaloguj się do witryny Azure Portal.

  2. Wybierz pozycję +NOWA>aplikacja internetowa + mobilnaaplikacja mobilna>, a następnie podaj nazwę zaplecza usługi Mobile Apps.

  3. W obszarze Grupa zasobów wybierz istniejącą grupę zasobów lub utwórz nową (używając tej samej nazwy co aplikacja).

  4. W przypadku planu App Service wybrano plan domyślny (w warstwie Standardowa). Możesz również wybrać inny plan lub utworzyć nowy.

    Ustawienia planu App Service określają lokalizację, funkcje, koszty i zasoby obliczeniowe skojarzone z aplikacją. Aby uzyskać więcej informacji na temat planów App Service i sposobu tworzenia nowego planu w innej warstwie cenowej i w żądanej lokalizacji, zobacz Azure App Service szczegółowe omówienie planów.

  5. Wybierz przycisk Utwórz. Ten krok powoduje utworzenie zaplecza usługi Mobile Apps.

  6. W okienku Ustawienia dla nowego zaplecza usługi Mobile Apps wybierz pozycję Szybki start> platformy > aplikacji klienckiej Połącz bazę danych.

    Opcje nawiązywania połączenia z bazą danych

  7. W okienku Dodawanie połączenia danych wybierz pozycję SQL Database>Utwórz nową bazę danych. Wprowadź nazwę bazy danych, wybierz warstwę cenową, a następnie wybierz pozycję Serwer. Możesz użyć tej nowej bazy danych ponownie. Jeśli masz już bazę danych w tej samej lokalizacji, możesz zamiast tego wybrać opcję Użyj istniejącej bazy danych. Nie zalecamy używania bazy danych w innej lokalizacji ze względu na koszty przepustowości i większe opóźnienie.

    Wybieranie bazy danych

  8. W okienku Nowy serwer wprowadź unikatową nazwę serwera w polu Nazwa serwera , podaj nazwę logowania i hasło, wybierz pozycję Zezwalaj usługom platformy Azure na dostęp do serwera, a następnie wybierz przycisk OK. Ten krok tworzy nową bazę danych.

  9. W okienku Dodawanie połączenia danych wybierz pozycję Parametry połączenia, wprowadź wartości logowania i hasła dla bazy danych, a następnie wybierz przycisk OK.

    Przed kontynuowaniem poczekaj kilka minut na pomyślne wdrożenie bazy danych.

W bloku Wprowadzenie w obszarze Tworzenie interfejsu API tabeli wybierz pozycję C# jako język zaplecza. Kliknij pozycję Pobierz, wyodrębnij skompresowane pliki projektu na komputer lokalny i otwórz rozwiązanie w programie Visual Studio.

Tworzenie zaplecza platformy .NET przy użyciu programu Visual Studio 2017

Zainstaluj obciążenie platformy Azure za pośrednictwem Instalator programu Visual Studio, aby opublikować projekt usługi Azure Mobile Apps z poziomu programu Visual Studio. Po zainstalowaniu zestawu SDK utwórz aplikację ASP.NET, wykonując następujące kroki:

  1. Otwórz okno dialogowe Nowy projekt (z menu Plik>nowy>projekt...).
  2. Rozwiń węzeł Visual C# i wybierz pozycję Sieć Web.
  3. Wybierz pozycję ASP.NET Aplikacja internetowa (.NET Framework).
  4. Wypełnij nazwę projektu. Następnie kliknij przycisk OK.
  5. Wybierz pozycję Azure Mobile App (Aplikacja mobilna Platformy Azure ) z listy szablonów.
  6. Kliknij przycisk OK , aby utworzyć rozwiązanie.
  7. Kliknij prawym przyciskiem myszy projekt w Eksplorator rozwiązań i wybierz polecenie Publikuj..., a następnie wybierz pozycję App Service jako obiekt docelowy publikowania.
  8. Postępuj zgodnie z monitami, aby uwierzytelnić się i wybrać nowy lub istniejący Azure App Service do opublikowania.

Tworzenie zaplecza platformy .NET przy użyciu programu Visual Studio 2015

Zainstaluj zestaw Azure SDK dla platformy .NET (wersja 2.9.0 lub nowsza), aby utworzyć projekt usługi Azure Mobile Apps w programie Visual Studio. Po zainstalowaniu zestawu SDK utwórz aplikację ASP.NET, wykonując następujące kroki:

  1. Otwórz okno dialogowe Nowy projekt (z menu Plik>nowy>projekt...).
  2. Rozwiń węzeł Szablony>Visual C#, a następnie wybierz pozycję Sieć Web.
  3. Wybierz pozycję Aplikacja internetowa platformy ASP.NET.
  4. Wypełnij nazwę projektu. Następnie kliknij przycisk OK.
  5. W obszarze ASP.NET szablonów 4.5.2 wybierz pozycję Aplikacja mobilna platformy Azure. Sprawdź host w chmurze, aby utworzyć zaplecze mobilne w chmurze, do którego można opublikować ten projekt.
  6. Kliknij przycisk OK.

Instrukcje: pobieranie i inicjowanie zestawu SDK

Zestaw SDK jest dostępny w NuGet.org. Ten pakiet zawiera podstawowe funkcje wymagane do rozpoczęcia korzystania z zestawu SDK. Aby zainicjować zestaw SDK, należy wykonać akcje w obiekcie HttpConfiguration .

Instalacja zestawu SDK

Aby zainstalować zestaw SDK, kliknij prawym przyciskiem myszy projekt serwera w programie Visual Studio, wybierz pozycję Zarządzaj pakietami NuGet, wyszukaj pakiet Microsoft.Azure.Mobile.Server , a następnie kliknij przycisk Zainstaluj.

Inicjowanie projektu serwera

Projekt serwera zaplecza platformy .NET jest inicjowany podobnie jak w przypadku innych projektów ASP.NET, w tym klasy uruchamiania OWIN. Upewnij się, że odwołujesz się do pakietu Microsoft.Owin.Host.SystemWebNuGet . Aby dodać tę klasę w programie Visual Studio, kliknij prawym przyciskiem myszy projekt serwera, a następnie wybierz pozycję Dodaj>nowy element, a następnie pozycjęWeb GeneralOWIN Startup class (Ogólna >klasa uruchamiania OWINsieci Web>). Klasa jest generowana przy użyciu następującego atrybutu:

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

Configuration() W metodzie klasy uruchamiania OWIN użyj obiektu HttpConfiguration, aby skonfigurować środowisko usługi Azure Mobile Apps. Poniższy przykład inicjuje projekt serwera bez dodanych funkcji:

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

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

    app.UseWebApi(config);
}

Aby włączyć poszczególne funkcje, należy wywołać metody rozszerzeń w obiekcie MobileAppConfiguration przed wywołaniem metody ApplyTo. Na przykład poniższy kod dodaje trasy domyślne do wszystkich kontrolerów interfejsu API, które mają atrybut [MobileAppController] podczas inicjowania:

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

Przewodnik Szybki start serwera z Azure Portal wywołuje metodę UseDefaultConfiguration(). Jest to równoważne z następującą konfiguracją:

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

Używane metody rozszerzenia to:

  • AddMobileAppHomeController() udostępnia domyślną stronę główną usługi Azure Mobile Apps.
  • MapApiControllers() Zapewnia niestandardowe możliwości interfejsu API dla kontrolerów WebAPI ozdobionych atrybutem [MobileAppController] .
  • AddTables() udostępnia mapowanie punktów końcowych na /tables kontrolery tabel.
  • AddTablesWithEntityFramework() to krótka ręka do mapowania /tables punktów końcowych przy użyciu kontrolerów opartych na programie Entity Framework.
  • AddPushNotifications() Udostępnia prostą metodę rejestrowania urządzeń w usłudze Notification Hubs.
  • MapLegacyCrossDomainController() Zapewnia standardowe nagłówki CORS na potrzeby lokalnego programowania.

Rozszerzenia zestawu SDK

Następujące pakiety rozszerzeń oparte na nuGet udostępniają różne funkcje mobilne, które mogą być używane przez aplikację. Rozszerzenia można włączyć podczas inicjowania przy użyciu obiektu MobileAppConfiguration .

  • Microsoft.Azure.Mobile.Server.Quickstart obsługuje podstawową konfigurację usługi Mobile Apps. Dodano do konfiguracji przez wywołanie metody rozszerzenia UseDefaultConfiguration podczas inicjowania . To rozszerzenie obejmuje następujące rozszerzenia: powiadomienia, uwierzytelnianie, jednostka, tabele, międzydomenowe i pakiety główne. Ten pakiet jest używany przez przewodnik Szybki start dotyczący usługi Mobile Apps dostępny w Azure Portal.
  • Microsoft.Azure.Mobile.Server.Home Implementuje domyślną, że ta aplikacja mobilna jest uruchomiona na stronie głównej witryny sieci Web. Dodaj do konfiguracji, wywołując metodę rozszerzenia AddMobileAppHomeController .
  • Microsoft.Azure.Mobile.Server.Tables zawiera klasy do pracy z danymi i konfigurują potok danych. Dodaj do konfiguracji, wywołując metodę rozszerzenia AddTables .
  • Microsoft.Azure.Mobile.Server.Entity umożliwia programowi Entity Framework dostęp do danych w SQL Database. Dodaj do konfiguracji, wywołując metodę rozszerzenia AddTablesWithEntityFramework .
  • Microsoft.Azure.Mobile.Server.Authentication umożliwia uwierzytelnianie i konfigurowanie oprogramowania pośredniczącego OWIN używanego do sprawdzania poprawności tokenów. Dodaj do konfiguracji, wywołując element AddAppServiceAuthentication i IAppBuilder. Użyj metod rozszerzeniaAppServiceAuthentication .
  • Microsoft.Azure.Mobile.Server.Notifications włącza powiadomienia wypychane i definiuje punkt końcowy rejestracji wypychanej. Dodaj do konfiguracji, wywołując metodę rozszerzenia AddPushNotifications .
  • Microsoft.Azure.Mobile.Server.CrossDomain Tworzy kontroler służący do obsługi danych w starszych przeglądarkach internetowych z poziomu aplikacji mobilnej. Dodaj do konfiguracji, wywołując metodę rozszerzenia MapLegacyCrossDomainController .
  • Microsoft.Azure.Mobile.Server.Login udostępnia metodę AppServiceLoginHandler.CreateToken(), która jest metodą statyczną używaną podczas scenariuszy uwierzytelniania niestandardowego.

Instrukcje: publikowanie projektu serwera

W tej sekcji pokazano, jak opublikować projekt zaplecza platformy .NET z poziomu programu Visual Studio. Możesz również wdrożyć projekt zaplecza przy użyciu usługi Git lub dowolnej z innych dostępnych tam metod.

  1. W programie Visual Studio ponownie skompiluj projekt, aby przywrócić pakiety NuGet.

  2. W Eksplorator rozwiązań kliknij prawym przyciskiem myszy projekt, kliknij pozycję Publikuj. Po pierwszym opublikowaniu należy zdefiniować profil publikowania. Po zdefiniowaniu profilu możesz go wybrać i kliknąć przycisk Publikuj.

  3. Jeśli zostanie wyświetlony monit o wybranie miejsca docelowego publikowania, kliknij pozycję Microsoft Azure App Service>Dalej, a następnie (w razie potrzeby) zaloguj się przy użyciu poświadczeń platformy Azure. Program Visual Studio pobiera i bezpiecznie przechowuje ustawienia publikowania bezpośrednio z platformy Azure.

  4. Wybierz subskrypcję, wybierz pozycję Typ zasobu z widoku, rozwiń węzeł Aplikacja mobilna, a następnie kliknij zaplecze aplikacji mobilnej, a następnie kliknij przycisk OK.

  5. Sprawdź informacje o profilu publikowania i kliknij przycisk Publikuj.

    Po pomyślnym opublikowaniu zaplecza aplikacji mobilnej zostanie wyświetlona strona docelowa wskazująca powodzenie.

Instrukcje: definiowanie kontrolera tabeli

Zdefiniuj kontroler tabel, aby uwidocznić tabelę SQL klientom mobilnym. Konfigurowanie kontrolera tabel wymaga trzech kroków:

  1. Utwórz klasę Obiektu transferu danych (DTO).
  2. Skonfiguruj odwołanie do tabeli w klasie Mobile DbContext.
  3. Utwórz kontroler tabeli.

Obiekt transferu danych (DTO) to zwykły obiekt języka C#, który dziedziczy z EntityDataklasy . Przykład:

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

DTO służy do definiowania tabeli w bazie danych SQL. Aby utworzyć wpis bazy danych, dodaj DbSet<> właściwość do używanego obiektu DbContext. W domyślnym szablonie projektu dla usługi Azure Mobile Apps element DbContext nosi nazwę 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()));
    }
}

Jeśli masz zainstalowany zestaw Azure SDK, możesz teraz utworzyć kontroler tabeli szablonów w następujący sposób:

  1. Kliknij prawym przyciskiem myszy folder Kontrolery i wybierz polecenie Dodaj>kontroler....
  2. Wybierz opcję Kontroler tabel usługi Azure Mobile Apps , a następnie kliknij przycisk Dodaj.
  3. W oknie dialogowym Dodawanie kontrolera :
    • Na liście rozwijanej Klasa modelu wybierz nowy cel DTO.
    • Na liście rozwijanej DbContext wybierz klasę DbContext usługi mobilnej.
    • Nazwa kontrolera jest tworzona dla Ciebie.
  4. Kliknij pozycję Dodaj.

Projekt serwera Szybki start zawiera przykład prostego elementu TodoItemController.

Instrukcje: dostosowywanie rozmiaru stronicowania tabeli

Domyślnie usługa Azure Mobile Apps zwraca 50 rekordów na żądanie. Stronicowanie gwarantuje, że klient nie powiązał wątku interfejsu użytkownika ani serwera zbyt długo, zapewniając dobre środowisko użytkownika. Aby zmienić rozmiar stronicowania tabeli, zwiększ rozmiar "dozwolonego rozmiaru zapytania" po stronie serwera i rozmiar strony po stronie klienta Strona serwera "dozwolony rozmiar zapytania" jest dostosowywana przy użyciu atrybutu EnableQuery :

[EnableQuery(PageSize = 500)]

Upewnij się, że rozmiar pagesize jest taki sam lub większy niż rozmiar żądany przez klienta. Aby uzyskać szczegółowe informacje na temat zmiany rozmiaru strony klienta, zapoznaj się z konkretną dokumentacją instrukcji HOWTO klienta.

Instrukcje: definiowanie niestandardowego kontrolera interfejsu API

Niestandardowy kontroler interfejsu API zapewnia najbardziej podstawową funkcjonalność zaplecza aplikacji mobilnej, ujawniając punkt końcowy. Kontroler interfejsu API specyficzny dla urządzeń przenośnych można zarejestrować przy użyciu atrybutu [MobileAppController]. Atrybut MobileAppController rejestruje trasę, konfiguruje serializator JSON usługi Mobile Apps i włącza sprawdzanie wersji klienta.

  1. W programie Visual Studio kliknij prawym przyciskiem myszy folder Kontrolery, a następnie kliknij polecenie Dodaj> kontroler, wybierz pozycję Kontroler internetowego interfejsu API 2 — pusty i kliknij przycisk Dodaj.

  2. Podaj nazwę kontrolera, taką jak CustomController, i kliknij przycisk Dodaj.

  3. W nowym pliku klasy kontrolera dodaj następującą instrukcję using:

     using Microsoft.Azure.Mobile.Server.Config;
    
  4. Zastosuj atrybut [MobileAppController] do definicji klasy kontrolera interfejsu API, jak w poniższym przykładzie:

     [MobileAppController]
     public class CustomController : ApiController
     {
           //...
     }
    
  5. W pliku App_Start/Startup.MobileApp.cs dodaj wywołanie metody rozszerzenia MapApiControllers , jak pokazano w poniższym przykładzie:

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

Można również użyć UseDefaultConfiguration() metody rozszerzenia zamiast MapApiControllers(). Każdy kontroler, który nie ma zastosowanego elementu MobileAppControllerAttribute , nadal może być dostępny przez klientów, ale może nie być prawidłowo używany przez klientów przy użyciu dowolnego zestawu SDK klienta aplikacji mobilnej.

Instrukcje: praca z uwierzytelnianiem

Usługa Azure Mobile Apps używa uwierzytelniania/autoryzacji App Service w celu zabezpieczenia zaplecza mobilnego. W tej sekcji przedstawiono sposób wykonywania następujących zadań związanych z uwierzytelnianiem w projekcie serwera zaplecza platformy .NET:

Instrukcje: dodawanie uwierzytelniania do projektu serwera

Uwierzytelnianie można dodać do projektu serwera, rozszerzając obiekt MobileAppConfiguration i konfigurując oprogramowanie pośredniczące OWIN. Po zainstalowaniu pakietu Microsoft.Azure.Mobile.Server.Quickstart i wywołaniu metody rozszerzenia UseDefaultConfiguration możesz przejść do kroku 3.

  1. W programie Visual Studio zainstaluj pakiet Microsoft.Azure.Mobile.Server.Authentication .

  2. W pliku projektu Startup.cs dodaj następujący wiersz kodu na początku metody Configuration :

     app.UseAppServiceAuthentication(config);
    

    Ten składnik oprogramowania pośredniczącego OWIN weryfikuje tokeny wystawione przez skojarzoną bramę App Service.

  3. [Authorize] Dodaj atrybut do dowolnego kontrolera lub metody, która wymaga uwierzytelniania.

Aby dowiedzieć się, jak uwierzytelniać klientów w zapleczu usługi Mobile Apps, zobacz Dodawanie uwierzytelniania do aplikacji.

Instrukcje: używanie uwierzytelniania niestandardowego dla aplikacji

Ważne

Aby włączyć uwierzytelnianie niestandardowe, należy najpierw włączyć uwierzytelnianie App Service bez wybrania dostawcy dla App Service w Azure Portal. Umożliwi to WEBSITE_AUTH_SIGNING_KEY zmiennej środowiskowej w przypadku hostowanych.

Jeśli nie chcesz używać jednego z dostawców uwierzytelniania/autoryzacji App Service, możesz zaimplementować własny system logowania. Zainstaluj pakiet Microsoft.Azure.Mobile.Server.Login , aby ułatwić generowanie tokenów uwierzytelniania. Podaj własny kod do weryfikowania poświadczeń użytkownika. Możesz na przykład sprawdzić hasła z solą i skrótami haseł w bazie danych. W poniższym isValidAssertion() przykładzie metoda (zdefiniowana gdzie indziej) jest odpowiedzialna za te kontrole.

Uwierzytelnianie niestandardowe jest uwidocznione przez utworzenie interfejsu APIController i uwidacznianie register i login akcje. Klient powinien używać niestandardowego interfejsu użytkownika do zbierania informacji od użytkownika. Informacje są następnie przesyłane do interfejsu API przy użyciu standardowego wywołania HTTP POST. Gdy serwer zweryfikuje asercji, token zostanie wystawiony przy użyciu AppServiceLoginHandler.CreateToken() metody . Element ApiController nie powinien używać atrybutu [MobileAppController] .

Przykładowa login akcja:

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

W poprzednim przykładzie wartości LoginResult i LoginResultUser są obiektami, które można serializować, ujawniając wymagane właściwości. Klient oczekuje, że odpowiedzi logowania zostaną zwrócone jako obiekty JSON formularza:

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

Metoda AppServiceLoginHandler.CreateToken() zawiera odbiorców i parametr wystawcy . Oba te parametry są ustawione na adres URL katalogu głównego aplikacji przy użyciu schematu HTTPS. Podobnie należy ustawić wartość secretKey jako wartość klucza podpisywania aplikacji. Nie dystrybuuj klucza podpisywania w kliencie, ponieważ może służyć do rozpoznawania kluczy i personifikacji użytkowników. Klucz podpisywania można uzyskać w App Service, odwołując się do zmiennej środowiskowej WEBSITE_AUTH_SIGNING_KEY. W razie potrzeby w kontekście debugowania lokalnego postępuj zgodnie z instrukcjami w sekcji Debugowanie lokalne z uwierzytelnianiem , aby pobrać klucz i zapisać go jako ustawienie aplikacji.

Wystawiony token może również zawierać inne oświadczenia i datę wygaśnięcia. Co najmniej wystawiony token musi zawierać oświadczenie podmiotu (pod).

Standardową metodę klienta loginAsync() można obsługiwać, przeciążając trasę uwierzytelniania. Jeśli klient wywołuje logowanie client.loginAsync('custom'); , trasa musi mieć wartość /.auth/login/custom. Trasę dla niestandardowego kontrolera uwierzytelniania można ustawić przy użyciu polecenia MapHttpRoute():

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

Porada

loginAsync() Użycie podejścia zapewnia, że token uwierzytelniania jest dołączany do każdego kolejnego wywołania usługi.

Instrukcje: pobieranie uwierzytelnionych informacji o użytkowniku

Gdy użytkownik jest uwierzytelniany przez App Service, możesz uzyskać dostęp do przypisanego identyfikatora użytkownika i innych informacji w kodzie zaplecza platformy .NET. Informacje o użytkowniku mogą służyć do podejmowania decyzji dotyczących autoryzacji w zapleczu. Poniższy kod uzyskuje identyfikator użytkownika skojarzony z żądaniem:

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

Identyfikator SID pochodzi z identyfikatora użytkownika specyficznego dla dostawcy i jest statyczny dla danego użytkownika i dostawcy logowania. Identyfikator SID ma wartość null dla nieprawidłowych tokenów uwierzytelniania.

App Service umożliwia również żądanie określonych oświadczeń od dostawcy logowania. Każdy dostawca tożsamości może podać więcej informacji przy użyciu zestawu SDK dostawcy tożsamości. Na przykład możesz użyć interfejs Graph API Facebook na potrzeby informacji o znajomych. Możesz określić oświadczenia, które są żądane w bloku dostawcy w Azure Portal. Niektóre oświadczenia wymagają dodatkowej konfiguracji z dostawcą tożsamości.

Poniższy kod wywołuje metodę rozszerzenia GetAppServiceIdentityAsync w celu uzyskania poświadczeń logowania, które obejmują token dostępu wymagany do wysłania żądań względem interfejs Graph API Serwisu Facebook:

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

Dodaj instrukcję using, System.Security.Principal aby podać metodę rozszerzenia GetAppServiceIdentityAsync .

Instrukcje: ograniczanie dostępu do danych dla autoryzowanych użytkowników

W poprzedniej sekcji pokazaliśmy, jak pobrać identyfikator użytkownika uwierzytelnionego użytkownika. Możesz ograniczyć dostęp do danych i innych zasobów na podstawie tej wartości. Na przykład dodanie kolumny userId do tabel i filtrowanie wyników zapytania według identyfikatora użytkownika jest prostym sposobem ograniczenia zwracanych danych tylko do autoryzowanych użytkowników. Poniższy kod zwraca wiersze danych tylko wtedy, gdy identyfikator SID jest zgodny z wartością w kolumnie UserId w tabeli 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);

Metoda Query() zwraca element IQueryable , który może być manipulowany przez LINQ w celu obsługi filtrowania.

Instrukcje: dodawanie powiadomień wypychanych do projektu serwera

Dodaj powiadomienia wypychane do projektu serwera, rozszerzając obiekt MobileAppConfiguration i tworząc klienta usługi Notification Hubs.

  1. W programie Visual Studio kliknij prawym przyciskiem myszy projekt serwera i kliknij polecenie Zarządzaj pakietami NuGet, wyszukaj polecenie Microsoft.Azure.Mobile.Server.Notifications, a następnie kliknij przycisk Zainstaluj.

  2. Powtórz ten krok, aby zainstalować Microsoft.Azure.NotificationHubs pakiet, który zawiera bibliotekę klienta usługi Notification Hubs.

  3. W pliku App_Start/Startup.MobileApp.cs dodaj wywołanie metody rozszerzenia AddPushNotifications() podczas inicjowania:

     new MobileAppConfiguration()
         // other features...
         .AddPushNotifications()
         .ApplyTo(config);
    
  4. Dodaj następujący kod, który tworzy klienta usługi Notification Hubs:

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

Teraz możesz użyć klienta usługi Notification Hubs do wysyłania powiadomień wypychanych do zarejestrowanych urządzeń. Aby uzyskać więcej informacji, zobacz Dodawanie powiadomień wypychanych do aplikacji. Aby dowiedzieć się więcej o usłudze Notification Hubs, zobacz Notification Hubs Overview (Omówienie usługi Notification Hubs).

Instrukcje: włączanie ukierunkowanego wypychania przy użyciu tagów

Usługa Notification Hubs umożliwia wysyłanie powiadomień docelowych do określonych rejestracji przy użyciu tagów. Kilka tagów jest tworzonych automatycznie:

  • Identyfikator instalacji identyfikuje określone urządzenie.
  • Identyfikator użytkownika na podstawie uwierzytelnionego identyfikatora SID identyfikuje określonego użytkownika.

Dostęp do identyfikatora instalacji można uzyskać z właściwości installationId w obiekcie MobileServiceClient. W poniższym przykładzie pokazano, jak za pomocą identyfikatora instalacji dodać tag do określonej instalacji w usłudze Notification Hubs:

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

Wszelkie tagi dostarczone przez klienta podczas rejestracji powiadomień wypychanych są ignorowane przez zaplecze podczas tworzenia instalacji. Aby umożliwić klientowi dodawanie tagów do instalacji, należy utworzyć niestandardowy interfejs API, który dodaje tagi przy użyciu poprzedniego wzorca.

Zobacz Tagi powiadomień wypychanych dodanych przez klienta w przykładzie szybkiego startu App Service Mobile Apps.

Instrukcje: wysyłanie powiadomień wypychanych do uwierzytelnionego użytkownika

Gdy uwierzytelniony użytkownik rejestruje się w celu otrzymywania powiadomień wypychanych, tag identyfikatora użytkownika jest automatycznie dodawany do rejestracji. Za pomocą tego tagu można wysyłać powiadomienia wypychane do wszystkich urządzeń zarejestrowanych przez tę osobę. Poniższy kod pobiera identyfikator SID użytkownika wysyłającego żądanie i wysyła powiadomienie wypychane szablonu do każdej rejestracji urządzenia dla tej osoby:

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

Podczas rejestrowania powiadomień wypychanych z uwierzytelnionego klienta upewnij się, że uwierzytelnianie zostało ukończone przed podjęciem próby rejestracji. Aby uzyskać więcej informacji, zobacz Wypychanie do użytkowników w usłudze App Service Mobile Apps ukończono przykład szybki start dla zaplecza platformy .NET.

Instrukcje: debugowanie i rozwiązywanie problemów z zestawem .NET Server SDK

Azure App Service udostępnia kilka technik debugowania i rozwiązywania problemów dla aplikacji ASP.NET:

Rejestrowanie

Możesz zapisywać w dziennikach diagnostycznych App Service przy użyciu standardowego zapisywania śledzenia ASP.NET. Przed zapisem w dziennikach należy włączyć diagnostykę w zapleczu aplikacji mobilnej.

Aby włączyć diagnostykę i zapisać w dziennikach:

  1. Wykonaj kroki opisane w temacie Włączanie rejestrowania aplikacji (Windows).

  2. Dodaj następującą instrukcję using w pliku kodu:

     using System.Web.Http.Tracing;
    
  3. Utwórz moduł zapisywania śledzenia do zapisu z zaplecza platformy .NET do dzienników diagnostycznych w następujący sposób:

     ITraceWriter traceWriter = this.Configuration.Services.GetTraceWriter();
     traceWriter.Info("Hello, World");
    
  4. Opublikuj ponownie projekt serwera i uzyskaj dostęp do zaplecza aplikacji mobilnej, aby wykonać ścieżkę kodu przy użyciu rejestrowania.

  5. Pobierz i oceń dzienniki zgodnie z opisem w temacie Pliki dziennika programu Access.

Lokalne debugowanie przy użyciu uwierzytelniania

Aplikację można uruchomić lokalnie, aby przetestować zmiany przed opublikowaniem ich w chmurze. W przypadku większości zapleczy usługi Azure Mobile Apps naciśnij klawisz F5 w programie Visual Studio. Jednak podczas korzystania z uwierzytelniania należy wziąć pod uwagę pewne dodatkowe kwestie.

Musisz mieć aplikację mobilną opartą na chmurze ze skonfigurowanym App Service uwierzytelnianiem/autoryzacją, a klient musi mieć punkt końcowy chmury określony jako alternatywny host logowania. Zapoznaj się z dokumentacją platformy klienta, aby zapoznać się z wymaganymi krokami.

Upewnij się, że zainstalowano zaplecze mobilne Microsoft.Azure.Mobile.Server.Authentication . Następnie w klasie uruchamiania OWIN aplikacji dodaj następujące polecenie po MobileAppConfiguration zastosowaniu do elementu HttpConfiguration:

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

W poprzednim przykładzie należy skonfigurować ustawienia aplikacji authAudience i authIssuer w pliku Web.config jako adres URL katalogu głównego aplikacji przy użyciu schematu HTTPS. Podobnie należy ustawić wartość authSigningKey jako wartość klucza podpisywania aplikacji. Aby uzyskać klucz podpisywania:

  1. Przejdź do aplikacji w Azure Portal
  2. Kliknij pozycję Narzędzia, Kudu, Przejdź.
  3. W witrynie zarządzania Kudu kliknij pozycję Środowisko.
  4. Znajdź wartość WEBSITE_AUTH_SIGNING_KEY.

Użyj klucza podpisywania dla parametru authSigningKey w konfiguracji aplikacji lokalnej. Zaplecze mobilne jest teraz wyposażone w walidację tokenów podczas uruchamiania lokalnego, co klient uzyskuje token z punktu końcowego opartego na chmurze.