Dela via


Autentisera .NET-appar till Azure-tjänster under lokal utveckling med hjälp av asynkron autentisering

Asynkron autentisering samlar in användarautentiseringsuppgifter med hjälp av systemautentiseringskoordinatorn för att autentisera en app med InteractiveBrowserCredential. En systemautentiseringskoordinator är en app som körs på en användares dator som hanterar handskakningar för autentisering och tokenunderhåll för alla anslutna konton.

Asynkron autentisering erbjuder följande fördelar:

  • Aktiverar enkel Sign-On (SSO): Gör det möjligt för appar att förenkla hur användare autentiserar med Microsoft Entra-ID och skyddar Uppdateringstoken för Microsoft Entra-ID från exfiltrering och missbruk.
  • Förbättrad säkerhet: Många säkerhetsförbättringar levereras med asynkron meddelandekö, utan att du behöver uppdatera applogik.
  • Utökat funktionsstöd: Med hjälp av koordinatorn kan utvecklare komma åt omfattande funktioner för operativsystem och tjänster.
  • Systemintegrering: Program som använder plugin-programmet broker med den inbyggda kontoväljaren, så att användaren snabbt kan välja ett befintligt konto i stället för att ange samma autentiseringsuppgifter om och om igen.
  • Tokenskydd: Säkerställer att uppdateringstoken är enhetsbundna och gör det möjligt för appar att hämta enhetsbundna åtkomsttoken. Se Tokenskydd.

Windows tillhandahåller en autentiseringskoordinator med namnet Web Account Manager (WAM). WAM gör det möjligt för identitetsprovidrar som Microsoft Entra-ID att ansluta internt till operativsystemet och tillhandahålla säkra inloggningstjänster till appar. Med asynkron autentisering kan appen utföra alla åtgärder som tillåts av autentiseringsuppgifterna för interaktiv inloggning.

Personliga Microsoft-konton och arbets- eller skolkonton stöds. I Windows-versioner som stöds ersätts det webbläsarbaserade standardgränssnittet med en smidigare autentiseringsupplevelse, ungefär som för inbyggda Windows-appar.

macOS innehåller inte inbyggt en inbyggd autentiseringskoordinator. Asynkron Azure.Identity.Broker autentisering stöds via biblioteket, som använder plattformsspecifika mekanismer och kan integreras med appar som Microsoft-företagsportalen när enheter hanteras. Mer information finns i Microsoft Enterprise SSO-plugin-programmet för Apple-enheter.

Linux använder enkel inloggning med Microsoft för Linux som autentiseringskoordinator.

Konfigurera appen för asynkron autentisering

Följ dessa steg för att aktivera asynkron autentisering i ditt program:

  1. I Azure-portalen går du till Microsoft Entra-ID och väljer Appregistreringar på den vänstra menyn.

  2. Välj registreringen för din app och välj sedan Autentisering.

  3. Lägg till lämplig omdirigerings-URI till din appregistrering via en plattformskonfiguration:

    1. Under Plattformskonfigurationer väljer du + Lägg till en plattform.

    2. Under Konfigurera plattformar väljer du panelen för din programtyp (plattform) för att konfigurera dess inställningar, till exempel mobil- och skrivbordsprogram.

    3. I Anpassade omdirigerings-URI:er anger du följande omdirigerings-URI för din plattform:

      Platform Omdirigerings-URI
      Windows 10+ eller WSL ms-appx-web://Microsoft.AAD.BrokerPlugin/{your_client_id}
      macOS msauth.com.msauth.unsignedapp://auth för osignerade appar
      msauth.{bundle_id}://auth för signerade appar
      Linux https://login.microsoftonline.com/common/oauth2/nativeclient

      Ersätt {your_client_id} eller {bundle_id} med program-ID :t (klient) från appregistreringens översiktsfönster .

    4. Välj Konfigurera.

    Mer information finns i Lägga till en omdirigerings-URI i en appregistrering.

  4. I fönstret Autentisering går du till Avancerade inställningar och väljer Ja för Tillåt offentliga klientflöden.

  5. Välj Spara för att tillämpa ändringarna.

  6. Om du vill auktorisera programmet för specifika resurser navigerar du till den aktuella resursen, väljer API-behörigheter och aktiverar Microsoft Graph och andra resurser som du vill komma åt.

    Viktigt!

    Du måste också vara administratör för din klientorganisation för att bevilja medgivande till ditt program när du loggar in för första gången.

Tilldela roller

Om du vill köra appkoden med asynkron autentisering beviljar du ditt användarkonto behörigheter med rollbaserad åtkomstkontroll (RBAC) i Azure. Tilldela ditt användarkonto en lämplig roll för den relevanta Azure-tjänsten. Till exempel:

  • Azure Blob Storage: Tilldela rollen Datadeltagare för lagringskontot .
  • Azure Key Vault: Tilldela rollen Key Vault Secrets Officer .

Om en app anges måste den ha API-behörigheter för user_impersonation Åtkomst till Azure Storage (steg 6 i föregående avsnitt). Med den här API-behörigheten kan appen komma åt Azure Storage för den inloggade användarens räkning efter att medgivande har beviljats under inloggningen.

Implementera koden

Azure Identity-biblioteket stöder asynkron autentisering med hjälp av InteractiveBrowserCredential. Om du till exempel vill använda InteractiveBrowserCredential i en MAUI-app för att autentisera till Azure Key Vault med följer du dessa SecretClientsteg:

Azure Identity-biblioteket tillhandahåller interaktiv asynkron autentisering med hjälp av InteractiveBrowserCredential. Om du till exempel vill använda InteractiveBrowserCredential i en konsolapp för att autentisera till Azure Key Vault med följer du dessa SecretClientsteg:

  1. Installera paketen Azure.Identity och Azure.Identity.Broker .

    dotnet add package Azure.Identity
    dotnet add package Azure.Identity.Broker
    
  2. Hämta en referens till det överordnade fönstret där dialogrutan för kontoväljare ska visas.

  3. Skapa en instans av InteractiveBrowserCredential att använda InteractiveBrowserCredentialBrokerOptions.

// Get the parent window handle for MAUI on Windows
Microsoft.Maui.Controls.Window? parentWindow = this.GetParentWindow();
Microsoft.UI.Xaml.Window? windowHandle = parentWindow?.Handler?.PlatformView as Microsoft.UI.Xaml.Window;
IntPtr hwnd = windowHandle != null ? WinRT.Interop.WindowNative.GetWindowHandle(windowHandle) : IntPtr.Zero;

// Configure InteractiveBrowserCredentialBrokerOptions with parent window reference
InteractiveBrowserCredentialBrokerOptions options = new(hwnd)
{
    UseDefaultBrokerAccount = true,
};

// Create credential that will use WAM broker on Windows
InteractiveBrowserCredential credential = new(options);

SecretClient client = new(new Uri(KeyVaultUrl), credential);
KeyVaultSecret secret = await client.GetSecretAsync(SecretName);
  1. Installera paketen Azure.Identity och Azure.Identity.Broker .

    dotnet add package Azure.Identity
    dotnet add package Azure.Identity.Broker
    

    Anmärkning

    macOS-stöd finns i Azure.Identity.Broker version 1.3.0 och senare.

  2. Hämta en referens till det överordnade fönstret där dialogrutan för kontoväljare ska visas.

  3. Skapa en instans av InteractiveBrowserCredential att använda InteractiveBrowserCredentialBrokerOptions.

// Get the parent window handle for MAUI on Mac Catalyst
Microsoft.Maui.Controls.Window? parentWindow = this.GetParentWindow();
UIWindow? uiWindow = parentWindow?.Handler?.PlatformView as UIWindow;
IntPtr hwnd = uiWindow != null ? uiWindow.Handle : IntPtr.Zero;

// Configure InteractiveBrowserCredentialBrokerOptions with parent window reference
InteractiveBrowserCredentialBrokerOptions options = new(hwnd)
{
    UseDefaultBrokerAccount = true,
};

// Create credential that will use the broker on macOS
InteractiveBrowserCredential credential = new(options);

SecretClient client = new(new Uri(KeyVaultUrl), credential);
KeyVaultSecret secret = await client.GetSecretAsync(SecretName);
  1. Installera paketen Azure.Identity och Azure.Identity.Broker .

    dotnet add package Azure.Identity
    dotnet add package Azure.Identity.Broker
    

    Anmärkning

    Linux-stöd finns i Azure.Identity.Broker version 1.3.0 och senare.

  2. Hämta en referens till det överordnade fönstret där dialogrutan för kontoväljare ska visas.

  3. Skapa en instans av InteractiveBrowserCredential att använda InteractiveBrowserCredentialBrokerOptions.

/// <summary>
/// Get the handle of the console window for Linux
/// </summary>
[DllImport("libX11")]
static extern IntPtr XOpenDisplay(string display);

[DllImport("libX11")]
static extern IntPtr XRootWindow(IntPtr display, int screen);

try
{
    IntPtr parentWindowHandle = XRootWindow(XOpenDisplay(null), 0);
    Func<IntPtr> consoleWindowHandleProvider = () => parentWindowHandle;

    InteractiveBrowserCredentialBrokerOptions options = new(parentWindowHandle)
    {
        UseDefaultBrokerAccount = true,
    };
    
    // Create the InteractiveBrowserCredential using broker support
    InteractiveBrowserCredential credential = new(options);

    Uri vaultUri = new("https://<your-key-vault-name>.vault.azure.net/");
    SecretClient client = new(vaultUri, credential);

    Console.WriteLine("Retrieving secret 'MySecret' from Key Vault...");
    KeyVaultSecret secret = await client.GetSecretAsync("MySecret");

    return 0;
}

Tips/Råd

Visa den fullständiga exempelappkoden på GitHub-lagringsplatsen för .NET-dokument.

I föregående exempel är egenskapen UseDefaultBrokerAccount inställd på true, som väljer ett tyst, asynkront autentiseringsflöde med standardsystemkontot. På så sätt behöver användaren inte upprepade gånger välja samma konto. Om tyst, asynkron autentisering misslyckas eller UseDefaultBrokerAccount är inställt på false, InteractiveBrowserCredential återgår till interaktiv, asynkron autentisering.

Följande skärmbild visar den alternativa interaktiva, asynkrona autentiseringsupplevelsen:

En skärmbild som visar Windows-inloggningen när du använder en broker-aktiverad InteractiveBrowserCredential-instans för att autentisera en användare.

Följande skärmbild visar den alternativa interaktiva, asynkrona autentiseringsupplevelsen:

En skärmbild som visar inloggningsupplevelsen för macOS när du använder en broker-aktiverad InteractiveBrowserCredential-instans för att autentisera en användare.

Följande video visar den alternativa interaktiva, asynkrona autentiseringsupplevelsen:

En animerad gif som visar Linux-inloggningsupplevelsen när du använder en broker-aktiverad InteractiveBrowserCredential-instans för att autentisera en användare.