Přidání ověřování do aplikace Avalonia
Poznámka
Tento produkt je vyřazený. Náhradu za projekty používající .NET 8 nebo novější najdete v knihovně Community Toolkit Datasync.
V tomto kurzu přidáte ověřování Microsoftu do projektu TodoApp pomocí ID Microsoft Entra. Před dokončením tohoto kurzu se ujistěte, že jste vytvořili projekt a nasadili back-endový.
Spropitné
I když pro ověřování používáme ID Microsoft Entra, můžete v Azure Mobile Apps použít libovolnou knihovnu ověřování, kterou si přejete.
Přidání ověřování do back-endové služby
Vaše back-endová služba je standardní služba ASP.NET 6. Všechny kurzy, které ukazují, jak povolit ověřování pro službu ASP.NET 6, funguje s Azure Mobile Apps.
Pokud chcete povolit ověřování Microsoft Entra pro vaši back-endovou službu, musíte:
- Zaregistrujte aplikaci pomocí Microsoft Entra ID.
- Přidejte kontrolu ověřování do back-endového projektu ASP.NET 6.
Registrace aplikace
Nejprve zaregistrujte webové rozhraní API v tenantovi Microsoft Entra a přidejte rozsah podle následujících kroků:
Přihlaste se k webu azure Portal.
Pokud máte přístup k více tenantům, pomocí adresářů a předplatných v horní nabídce přepněte do tenanta, ve kterém chcete aplikaci zaregistrovat.
Vyhledejte a vyberte MICROSOFT Entra ID .
V části Spravovatvyberte Registrace aplikací>Nová registrace.
- Název: zadejte název aplikace; Například Rychlé zprovoznění TodoAppu . Uživatelé vaší aplikace uvidí tento název. Můžete ho později změnit.
- podporované typy účtů: Účty v libovolném adresáři organizace (jakýkoli adresář Microsoft Entra – Víceklient) a osobní účty Microsoft (např. Skype, Xbox)
Vyberte Zaregistrovat.
V části Spravovatvyberte Zveřejnit rozhraní API>Přidat obor.
U identifikátoru URI ID aplikacepřijměte výchozí nastavení tak, že vyberete Uložit a pokračovat.
Zadejte následující podrobnosti:
-
Název oboru:
access_as_user
- Kdo může souhlasit?: správci a uživatelé
- zobrazovaný názevsouhlasu správce
: - popis souhlasu správce :
Allows the app to access TodoApp as the signed-in user.
-
zobrazované jméno souhlasu uživatele:
Access TodoApp
- popis souhlasu uživatele :
Allow the app to access TodoApp on your behalf.
- stavu
: Povoleno
-
Název oboru:
Výběrem Přidat obor dokončete přidání oboru.
Všimněte si hodnoty oboru, podobně jako
api://<client-id>/access_as_user
(označované jako obor webového rozhraní API). Při konfiguraci klienta potřebujete obor.VybertePřehled
. Poznamenejte si ID aplikace
(klienta) v částiEssentials (označované jako ID aplikace webového rozhraní API ). Tuto hodnotu potřebujete ke konfiguraci back-endové služby.
Otevřete Visual Studio a vyberte TodoAppService.NET6
projekt.
Klikněte pravým tlačítkem na projekt
TodoAppService.NET6
a vyberte Spravovat balíčky NuGet....Na nové kartě vyberte Procházeta do vyhledávacího pole zadejte Microsoft.Identity.Web.
Vyberte balíček
Microsoft.Identity.Web
a stiskněte Nainstalovat.Podle pokynů dokončete instalaci balíčku.
Otevřete
Program.cs
. Do seznamu příkazůusing
přidejte následující:
using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.Identity.Web;
- Přidejte následující kód přímo nad volání
builder.Services.AddDbContext()
:
builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddMicrosoftIdentityWebApi(builder.Configuration);
builder.Services.AddAuthorization();
- Přidejte následující kód přímo nad volání
app.MapControllers()
:
app.UseAuthentication();
app.UseAuthorization();
Váš Program.cs
by teď měl vypadat takto:
using Microsoft.AspNetCore.Datasync;
using Microsoft.EntityFrameworkCore;
using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.Identity.Web;
using TodoAppService.NET6.Db;
var builder = WebApplication.CreateBuilder(args);
var connectionString = builder.Configuration.GetConnectionString("DefaultConnection");
if (connectionString == null)
{
throw new ApplicationException("DefaultConnection is not set");
}
builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddMicrosoftIdentityWebApi(builder.Configuration);
builder.Services.AddAuthorization();
builder.Services.AddDbContext<AppDbContext>(options => options.UseSqlServer(connectionString));
builder.Services.AddDatasyncControllers();
var app = builder.Build();
// Initialize the database
using (var scope = app.Services.CreateScope())
{
var context = scope.ServiceProvider.GetRequiredService<AppDbContext>();
await context.InitializeDatabaseAsync().ConfigureAwait(false);
}
// Configure and run the web service.
app.UseAuthentication();
app.UseAuthorization();
app.MapControllers();
app.Run();
- Upravte
Controllers\TodoItemController.cs
. Přidejte do třídy atribut[Authorize]
. Vaše třída by měla vypadat takto:
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Datasync;
using Microsoft.AspNetCore.Datasync.EFCore;
using Microsoft.AspNetCore.Mvc;
using TodoAppService.NET6.Db;
namespace TodoAppService.NET6.Controllers
{
[Authorize]
[Route("tables/todoitem")]
public class TodoItemController : TableController<TodoItem>
{
public TodoItemController(AppDbContext context)
: base(new EntityTableRepository<TodoItem>(context))
{
}
}
}
- Upravte
appsettings.json
. Přidejte následující blok:
"AzureAd": {
"Instance": "https://login.microsoftonline.com",
"ClientId": "<client-id>",
"TenantId": "common"
},
Nahraďte <client-id>
ID aplikace webového rozhraní API , které jste si poznamenali dříve. Po dokončení by měl vypadat takto:
{
"AzureAd": {
"Instance": "https://login.microsoftonline.com",
"ClientId": "<client-id>",
"TenantId": "common"
},
"ConnectionStrings": {
"DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=TodoApp;Trusted_Connection=True"
},
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*"
}
Znovu publikujte službu do Azure:
- Klikněte pravým tlačítkem na projekt
TodoAppService.NET6
a vyberte Publikovat.... - V pravém horním rohu karty vyberte tlačítko Publikovat.
Otevřete prohlížeč pro https://yoursite.azurewebsites.net/tables/todoitem?ZUMO-API-VERSION=3.0.0
. Všimněte si, že služba teď vrací odpověď 401
, která indikuje, že je vyžadováno ověřování.
Registrace aplikace ve službě identit
Rozhraní Microsoft Data Sync Framework má integrovanou podporu pro libovolného zprostředkovatele ověřování, který používá webový token JSON (JWT) v hlavičce transakce HTTP. Tato aplikace používá
Konfigurace nativní klientské aplikace
Můžete registrovat nativní klienty, abyste povolili ověřování webových rozhraní API hostovaných ve vaší aplikaci pomocí klientské knihovny, jako je knihovna Microsoft Identity Library (MSAL).
Na webu Azure Portalvyberte registrace>registrace aplikací Microsoft Entra>Nová registrace.
Na stránce Zaregistrovat aplikaci:
- Zadejte název
pro registraci aplikace. Možná budete chtít použít název native-quickstart
k odlišení od názvu, který používá vaše back-endová služba. - Vyberte Účty v libovolném adresáři organizace (libovolný adresář Microsoft Entra – Víceklient) a osobní účty Microsoft (např. Skype, Xbox).
- V identifikátoru URI přesměrování:
- Vyberte veřejného klienta
(mobilní & desktop) - Zadejte
quickstart://auth
adresy URL.
- Vyberte veřejného klienta
- Zadejte název
Vyberte Zaregistrovat.
Vyberte oprávnění rozhraní API>Přidat oprávnění>Rozhraní API.
Vyberte registraci aplikace, kterou jste vytvořili dříve pro vaši back-endovou službu. Pokud registraci aplikace nevidíte, ujistěte se, že jste přidali rozsah access_as_user.
V části Vyberte oprávnění, vyberte access_as_usera pak vyberte Přidat oprávnění.
Vyberte ověřování>mobilní a desktopové aplikace.
Zaškrtněte políčko vedle
https://login.microsoftonline.com/common/oauth2/nativeclient
.Zaškrtněte políčko vedle
msal{client-id}://auth
(nahrazení{client-id}
ID vaší aplikace).Vyberte Přidat identifikátor URIa pak do pole přidejte
http://localhost
pro další identifikátory URI.V dolní části stránky vyberte Uložit.
VybertePřehled
. Poznamenejte si ID aplikace (klienta) (označované jako ID nativní klientské aplikace), protože ho potřebujete ke konfiguraci mobilní aplikace.
Definovali jsme tři adresy URL přesměrování:
-
http://localhost
používají aplikace WPF. -
https://login.microsoftonline.com/common/oauth2/nativeclient
používají aplikace UPW. -
msal{client-id}://auth
používají mobilní aplikace (Android a iOS).
Přidání klienta Microsoft Identity Do aplikace
Otevřete řešení TodoApp.sln
v sadě Visual Studio a nastavte projekt TodoApp.Avalonia
jako spouštěný projekt. Do projektu
Do projektu platformy přidejte
Klikněte pravým tlačítkem myši na projekt a pak vyberte Spravovat balíčky NuGet....
Vyberte kartu Procházet.
Do vyhledávacího pole zadejte
Microsoft.Identity.Client
a stiskněte Enter.Vyberte výsledek
Microsoft.Identity.Client
a potom klikněte na Nainstalovat.Přijměte licenční smlouvu a pokračujte v instalaci.
Přidejte do konfigurace nativní ID klienta a back-endový obor.
Otevřete projekt TodoApp.Data
a upravte soubor Constants.cs
. Přidejte konstanty pro ApplicationId
a Scopes
:
public static class Constants
{
/// <summary>
/// The base URI for the Datasync service.
/// </summary>
public static string ServiceUri = "https://demo-datasync-quickstart.azurewebsites.net";
/// <summary>
/// The application (client) ID for the native app within Microsoft Entra ID
/// </summary>
public static string ApplicationId = "<client-id>";
/// <summary>
/// The list of scopes to request
/// </summary>
public static string[] Scopes = new[]
{
"<scope>"
};
}
Nahraďte <client-id>
ID nativní klientské aplikace , jste obdrželi při registraci klientské aplikace v Microsoft Entra ID a <scope>
oborem webového rozhraní API , jste zkopírovali při použití Zveřejnit rozhraní API při registraci aplikace služby.
Otevřete soubor MainWindowViewModel.cs
ve složce ViewModels
projektu TodoApp.Avalonia
.
Na začátek souboru přidejte následující příkazy using
:
using Microsoft.Datasync.Client;
using Microsoft.Identity.Client;
using System.Diagnostics;
using System.Linq;
Odeberte vlastnost TodoService
a nahraďte ji následujícím kódem:
public MainWindowViewModel()
{
IdentityClient = PublicClientApplicationBuilder.Create(Constants.ApplicationId)
.WithAuthority(AzureCloudInstance.AzurePublic, "common")
.WithRedirectUri("http://localhost")
.Build();
TodoService = new RemoteTodoService(GetAuthenticationToken);
TodoList = new TodoListViewModel(TodoService);
}
public IPublicClientApplication IdentityClient { get; }
public ITodoService TodoService { get; }
public TodoListViewModel TodoList { get; }
public async Task<AuthenticationToken> GetAuthenticationToken()
{
var accounts = await IdentityClient.GetAccountsAsync();
AuthenticationResult? result = null;
try
{
result = await IdentityClient
.AcquireTokenSilent(Constants.Scopes, accounts.FirstOrDefault())
.ExecuteAsync();
}
catch (MsalUiRequiredException)
{
result = await IdentityClient
.AcquireTokenInteractive(Constants.Scopes)
.ExecuteAsync();
}
catch (Exception ex)
{
// Display the error text - probably as a pop-up
Debug.WriteLine($"Error: Authentication failed: {ex.Message}");
}
return new AuthenticationToken
{
DisplayName = result?.Account?.Username ?? "",
ExpiresOn = result?.ExpiresOn ?? DateTimeOffset.MinValue,
Token = result?.AccessToken ?? "",
UserId = result?.Account?.Username ?? ""
};
}
Metoda GetAuthenticationToken()
pracuje s knihovnou MICROSOFT Identity Library (MSAL) a získá přístupový token vhodný pro autorizaci přihlášeného uživatele do back-endové služby. Tato funkce se pak předá RemoteTodoService
pro vytvoření klienta. Pokud je ověřování úspěšné, vytvoří se AuthenticationToken
s daty potřebnými k autorizaci jednotlivých požadavků. Pokud ne, vytvoří se místo toho chybný token s vypršenou platností.
Otestování aplikace
Aplikaci spusťte stisknutím klávesy F5. Po spuštění aplikace se otevře prohlížeč s žádostí o ověření. Při prvním spuštění aplikace se zobrazí výzva k vyjádření souhlasu s přístupem:
Stisknutím Ano pokračujte v aplikaci. Aplikace pokračuje stejně jako předtím.
Další kroky
Dále nakonfigurujte aplikaci tak, aby fungovala offline implementacíoffline úložiště .