Bővítse Xamarin.iOS-alkalmazását hitelesítési funkcióval
Ebben az oktatóanyagban Microsoft-hitelesítést ad hozzá a TodoApp-projekthez a Microsoft Entra ID használatával. Az oktatóanyag elvégzése előtt győződjön meg arról, hogy létrehozta a projektet, és üzembe helyezte a háttérrendszert.
Feljegyzés
Mivel az iOS-alkalmazás kulcskarika-hozzáférést igényel, be kell állítania egy iOS kiépítési profilt. A kiépítési profilhoz valódi iOS-eszközre vagy fizetős Apple Fejlesztői fiókra van szükség (ha a szimulátort használja). Kihagyhatja ezt az oktatóanyagot, és továbbléphet offline hozzáférés hozzáadására az alkalmazáshoz , ha a korlátozás miatt nem tudja használni a hitelesítést.
Tipp.
Bár a Hitelesítéshez Microsoft Entra-azonosítót használunk, az Azure Mobile Appsben bármilyen hitelesítési kódtárat használhat.
Hitelesítés hozzáadása a háttérszolgáltatáshoz
A háttérszolgáltatás egy standard ASP.NET 6 szolgáltatás. Minden olyan oktatóanyag, amely bemutatja, hogyan engedélyezheti a hitelesítést egy ASP.NET 6 szolgáltatáshoz, az Azure Mobile Apps szolgáltatással működik.
A Microsoft Entra-hitelesítés háttérszolgáltatáshoz való engedélyezéséhez a következőkre van szükség:
- Alkalmazás regisztrálása a Microsoft Entra-azonosítóval.
- Hitelesítési ellenőrzés hozzáadása a ASP.NET 6 háttérprojekthez.
Az alkalmazás regisztrálása
Először regisztrálja a webes API-t a Microsoft Entra-bérlőben, és adjon hozzá egy hatókört az alábbi lépések végrehajtásával:
Jelentkezzen be az Azure Portalra.
Ha több bérlőhöz is hozzáfér, a felső menü Címtárak + előfizetések szűrőjével válthat arra a bérlőre, amelyben regisztrálni szeretné az alkalmazást.
Keresse meg és válassza ki a Microsoft Entra-azonosítót.
A Kezelés területen válassza a Alkalmazásregisztrációk> New regisztráció lehetőséget.
- Név: adja meg az alkalmazás nevét, például a TodoApp rövid útmutatóját. Az alkalmazás felhasználói ezt a nevet fogják látni. Később módosíthatja.
- Támogatott fióktípusok: Bármely szervezeti címtárban (Bármely Microsoft Entra-címtárban – Több-bérlős) és személyes Microsoft-fiókokban (pl. Skype, Xbox) lévő fiókok
Válassza ki a pénztárgépet.
A Kezelés területen válassza az API-k> hatókör hozzáadása lehetőséget.
Az alkalmazásazonosító URI-ja esetén fogadja el az alapértelmezett beállítást a Mentés és a folytatás gombra kattintva.
Adja meg a következő adatokat:
- Hatókör neve:
access_as_user
- Kik járulhatnak hozzá?: Rendszergazda és felhasználók
- Rendszergazda hozzájárulás megjelenítendő neve:
Access TodoApp
- Rendszergazda hozzájárulás leírása:
Allows the app to access TodoApp as the signed-in user.
- Felhasználói hozzájárulás megjelenítendő neve:
Access TodoApp
- Felhasználói hozzájárulás leírása:
Allow the app to access TodoApp on your behalf.
- Állapot: Engedélyezve
- Hatókör neve:
Válassza a Hatókör hozzáadása lehetőséget a hatókör hozzáadásának befejezéséhez.
Figyelje meg a hatókör értékét, hasonló módon
api://<client-id>/access_as_user
(a webes API-hatókörhöz). Az ügyfél konfigurálásakor szükség van a hatókörre.Válassza az Áttekintés lehetőséget.
Jegyezze fel az alkalmazás (ügyfél) azonosítóját az Essentials szakaszban (a web API-alkalmazásazonosítót). Erre az értékre van szüksége a háttérszolgáltatás konfigurálásához.
Nyissa meg a Visual Studiót, és válassza ki a TodoAppService.NET6
projektet.
Kattintson a jobb gombbal a projektre, majd válassza a
TodoAppService.NET6
NuGet-csomagok kezelése... lehetőséget.Az új lapon válassza a Tallózás lehetőséget, majd írja be a Microsoft.Identity.Web kifejezést a keresőmezőbe.
Jelölje ki a csomagot, majd nyomja le az
Microsoft.Identity.Web
Install billentyűt.Kövesse az utasításokat a csomag telepítésének befejezéséhez.
Nyílt
Program.cs
. Adja hozzá a következőket az utasítások listájáhozusing
:
using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.Identity.Web;
- Adja hozzá a következő kódot közvetlenül a hívás
builder.Services.AddDbContext()
fölé:
builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddMicrosoftIdentityWebApi(builder.Configuration);
builder.Services.AddAuthorization();
- Adja hozzá a következő kódot közvetlenül a hívás
app.MapControllers()
fölé:
app.UseAuthentication();
app.UseAuthorization();
A Program.cs
fájl tartalmának most az alábbinak kell lennie:
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();
- Szerkessze a
Controllers\TodoItemController.cs
. Adjon hozzá egy[Authorize]
attribútumot az osztályhoz. Az osztálynak így kell kinéznie:
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))
{
}
}
}
- Szerkessze a
appsettings.json
. Adja hozzá a következő blokkot:
"AzureAd": {
"Instance": "https://login.microsoftonline.com",
"ClientId": "<client-id>",
"TenantId": "common"
},
Cserélje le a <client-id>
korábban rögzített webes API-alkalmazásazonosítóra . Ha elkészült, a következőhöz hasonlóan kell kinéznie:
{
"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": "*"
}
A szolgáltatás ismételt közzététele az Azure-ban:
- Kattintson a jobb gombbal a projektre, majd válassza a
TodoAppService.NET6
Közzététel...lehetőséget. - A lap jobb felső sarkában válassza a Közzététel gombot.
Nyisson meg egy böngészőt.https://yoursite.azurewebsites.net/tables/todoitem?ZUMO-API-VERSION=3.0.0
Vegye figyelembe, hogy a szolgáltatás most egy 401
választ ad vissza, amely azt jelzi, hogy hitelesítésre van szükség.
Alkalmazás regisztrálása az identitásszolgáltatásban
A Microsoft Data Sync Framework beépített támogatást nyújt minden olyan hitelesítésszolgáltatóhoz, amely Json Web Tokent (JWT) használ a HTTP-tranzakció fejlécén belül. Ez az alkalmazás a Microsoft Authentication Library (MSAL) használatával kéri le az ilyen jogkivonatot, és engedélyezi a bejelentkezett felhasználót a háttérszolgáltatásnak.
Natív ügyfélalkalmazás konfigurálása
Natív ügyfelek regisztrálásával engedélyezheti az alkalmazásban üzemeltetett webes API-k hitelesítését egy ügyfélkódtár, például a Microsoft Identity Library (MSAL) használatával.
Az Azure Portalon válassza a Microsoft Entra ID> Alkalmazásregisztrációk> New regisztrációt.
Az Alkalmazás regisztrálása lapon:
- adja meg az alkalmazásregisztráció nevét. Ezt a nevet érdemes lehet megkülönböztetni a háttérszolgáltatás által használt névtől
native-quickstart
. - Válassza a Fiókok lehetőséget bármely szervezeti könyvtárban (Bármely Microsoft Entra címtár – Több-bérlős) és személyes Microsoft-fiókokban (pl. Skype, Xbox).
- Átirányítási URI-ban:
- Nyilvános ügyfél kiválasztása (mobil és asztali)
- Adja meg az URL-címet
quickstart://auth
- adja meg az alkalmazásregisztráció nevét. Ezt a nevet érdemes lehet megkülönböztetni a háttérszolgáltatás által használt névtől
Válassza ki a pénztárgépet.
Válassza az API-engedélyeket>: Engedély>hozzáadása Saját API-k.
Válassza ki a háttérszolgáltatáshoz korábban létrehozott alkalmazásregisztrációt. Ha nem látja az alkalmazásregisztrációt, győződjön meg arról, hogy hozzáadta a access_as_user hatókört.
Az Engedélyek kiválasztása csoportban válassza a access_as_user, majd az Engedélyek hozzáadása lehetőséget.
Válassza a Authentication>Mobile és az asztali alkalmazások lehetőséget.
Jelölje be a mellette lévő jelölőnégyzetet
https://login.microsoftonline.com/common/oauth2/nativeclient
.Jelölje be a mellette lévő
msal{client-id}://auth
jelölőnégyzetet (az alkalmazásazonosítóra cserélve{client-id}
).Válassza az URI hozzáadása lehetőséget, majd adja hozzá
http://localhost
a mezőben a további URI-khoz.Válassza a Lap alján található Mentés lehetőséget.
Válassza az Áttekintés lehetőséget. Jegyezze fel az alkalmazás (ügyfél) azonosítóját (más néven natív ügyfélalkalmazás-azonosítót), amikor szüksége van rá a mobilalkalmazás konfigurálásához.
Három átirányítási URL-címet határoztunk meg:
http://localhost
WPF-alkalmazások használják.https://login.microsoftonline.com/common/oauth2/nativeclient
UWP-alkalmazások használják.msal{client-id}://auth
mobilalkalmazások (Android és iOS) használják.
A Microsoft Identity-ügyfél hozzáadása az alkalmazáshoz
Nyissa meg a megoldást a TodoApp.sln
Visual Studióban, és állítsa be a TodoApp.iOS
projektet indítási projektként. Adja hozzá a Microsoft Identity Libraryt (MSAL) a TodoApp.iOS
projekthez:
Adja hozzá a Microsoft Identity Libraryt (MSAL) a platformprojekthez:
Kattintson a jobb gombbal a projektre, majd válassza a NuGet-csomagok kezelése... lehetőséget.
Válassza a Tallózás lapot.
Írja be
Microsoft.Identity.Client
a keresőmezőbe, majd nyomja le az Enter billentyűt.Jelölje ki az eredményt, majd kattintson a
Microsoft.Identity.Client
Telepítés gombra.A telepítés folytatásához fogadja el a licencszerződést.
Adja hozzá a natív ügyfélazonosítót és a háttérbeli hatókört a konfigurációhoz.
Nyissa meg a TodoApp.Data
projektet, és szerkessze a Constants.cs
fájlt. Állandók hozzáadása a következőhözApplicationId
: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>"
};
}
Cserélje le az <client-id>
ügyfélalkalmazás Microsoft Entra-azonosítóban való regisztrálásakor kapott natív ügyfélalkalmazás-azonosítóra, valamint a <scope>
web API-hatókörre, amelyet a szolgáltatásalkalmazás regisztrálása során az Api-k elérhetővé tételének használatakor másolt.
Nyissa meg ViewControllers\HomeViewController.cs
a TodoApp.iOS
projektben. Adja hozzá a következő using
-utasításokat:
using Microsoft.Datasync.Client;
using Microsoft.Identity.Client;
using System.Diagnostics;
using System.Linq;
Az osztályban HomeViewController
adjon hozzá egy új tulajdonságot:
public IPublicClientApplication IdentityClient { get; set; }
Állítsa be a konstruktort a következőhöz:
public HomeViewController() {
Title = "Todo Items";
TodoService = new RemoteTodoService(GetAuthenticationToken);
TodoService.TodoItemsUpdated += OnTodoItemsUpdated;
}
Adja hozzá a GetAuthenticationToken
metódust az osztályhoz:
public async Task<AuthenticationToken> GetAuthenticationToken()
{
if (IdentityClient == null)
{
IdentityClient = PublicClientApplicationBuilder.Create(Constants.ApplicationId)
.WithAuthority(AzureCloudInstance.AzurePublic, "common")
.WithRedirectUri($"msal{Constants.ApplicationId}://auth")
.WithIosKeychainSecurityGroup("com.microsoft.adalcache")
.Build();
}
var accounts = await IdentityClient.GetAccountsAsync();
AuthenticationResult result = null;
bool tryInteractiveLogin = false;
try
{
result = await IdentityClient
.AcquireTokenSilent(Constants.Scopes, accounts.FirstOrDefault())
.ExecuteAsync();
}
catch (MsalUiRequiredException)
{
tryInteractiveLogin = true;
}
catch (Exception ex)
{
Debug.WriteLine($"MSAL Silent Error: {ex.Message}");
}
if (tryInteractiveLogin)
{
try
{
result = await IdentityClient
.AcquireTokenInteractive(Constants.Scopes)
.ExecuteAsync()
.ConfigureAwait(false);
}
catch (Exception ex)
{
Debug.WriteLine($"MSAL Interactive Error: {ex.Message}");
}
}
return new AuthenticationToken
{
DisplayName = result?.Account?.Username ?? "",
ExpiresOn = result?.ExpiresOn ?? DateTimeOffset.MinValue,
Token = result?.AccessToken ?? "",
UserId = result?.Account?.Username ?? ""
};
}
A GetAuthenticationToken()
módszer a Microsoft Identity Library (MSAL) segítségével olyan hozzáférési jogkivonatot kap, amely alkalmas a bejelentkezett felhasználónak a háttérszolgáltatáshoz való engedélyezésére. Ezt a függvényt ezután átadja a rendszer az RemoteTodoService
ügyfél létrehozásához. Ha a hitelesítés sikeres, a rendszer az AuthenticationToken
egyes kérések engedélyezéséhez szükséges adatokkal jön létre. Ha nem, akkor a rendszer ehelyett egy lejárt hibás jogkivonatot hoz létre.
Adja hozzá a következő kódot az AppDelegate
osztály aljára:
[Export("application:openURL:options:")]
public bool OpenUrl(UIApplication app, NSUrl url, NSDictionary options)
{
AuthenticationContinuationHelper.SetAuthenticationContinuationEventArgs(url);
return true;
}
Kulcskarika-hozzáférés hozzáadása a Entitlements.plist
következőhöz:
Nyissa meg a
Entitlements.plist
fájlt.Válassza a Kulcskarika lehetőséget.
Válassza az Új hozzáadása lehetőséget a kulcskarikacsoportokban.
Adja meg
com.microsoft.adalcache
az értéket:
Adja hozzá az egyéni jogosultságokat a projekthez:
Kattintson a jobb gombbal a projektre, majd válassza a
TodoApp.iOS
Tulajdonságok lehetőséget.Válassza az iOS-csomagaláírás lehetőséget.
Válassza az Egyéni jogosultságok mező melletti ... gombot.
Válassza a elemet
Entitlements
, majd válassza a Megnyitás lehetőséget.A projekt mentéséhez nyomja le a Ctrl+S billentyűkombinációt.
Az alkalmazás tesztelése
Feljegyzés
Mivel az iOS-alkalmazás kulcskarika-hozzáférést igényel, be kell állítania egy kiépítési profilt. A kiépítési profilhoz valódi eszközre vagy fizetős Apple Fejlesztői Fiókra van szükség (ha a szimulátort használja).
Állítsa be TodoApp.iOS
indítási projektként, majd hozza létre és futtassa az alkalmazást. Az alkalmazás indításakor a rendszer kérni fogja, hogy jelentkezzen be az alkalmazásba. Az első futtatáskor a rendszer arra kéri, hogy járuljon hozzá az alkalmazáshoz. A hitelesítés befejezése után az alkalmazás a szokásos módon fut.
Következő lépések
Ezután konfigurálja az alkalmazást offline működésre egy offline áruház implementálásával.
További olvasnivalók
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: