Ověřování uživatelů pomocí Azure Active Directory B2CAuthenticate Users with Azure Active Directory B2C

Stažení ukázky stažení ukázkyDownload Sample Download the sample

Azure Active Directory B2C poskytuje cloudovou správu identit pro webové a mobilní aplikace s přístupem uživatelů. V tomto článku se dozvíte, jak pomocí Azure Active Directory B2C integrovat správu identit do mobilní aplikace pomocí knihovny Microsoft Authentication Library.Azure Active Directory B2C provides cloud identity management for consumer-facing web and mobile applications. This article shows how to use Azure Active Directory B2C to integrate identity management into a mobile application with the Microsoft Authentication Library.

PřehledOverview

Azure Active Directory B2C (ADB2C) je služba správy identit pro aplikace s přístupem uživatelů.Azure Active Directory B2C (ADB2C) is an identity management service for consumer-facing applications. Umožňuje uživatelům přihlásit se ke svojí aplikaci pomocí stávajících účtů sociálních sítí nebo vlastních přihlašovacích údajů, jako jsou e-maily nebo uživatelské jméno a heslo.It allows users to sign in to your application using their existing social accounts or custom credentials such as email or username, and password. Vlastní přihlašovací účty se označují jako místní účty.Custom credential accounts are referred to as local accounts.

Proces integrace služby Azure Active Directory B2C Identity Management do mobilní aplikace je následující:The process for integrating the Azure Active Directory B2C identity management service into a mobile application is as follows:

  1. Vytvořte tenanta Azure Active Directory B2C.Create an Azure Active Directory B2C tenant.
  2. Zaregistrujte si mobilní aplikaci pomocí klienta Azure Active Directory B2C.Register your mobile application with the Azure Active Directory B2C tenant.
  3. Vytvořte zásady pro registraci a přihlašování a zapomenuté toky uživatelských hesel.Create policies for sign-up and sign-in, and forgot password user flows.
  4. Pomocí knihovny Microsoft Authentication Library (MSAL) můžete spustit ověřovací pracovní postup s vaším klientem Azure Active Directory B2C.Use the Microsoft Authentication Library (MSAL) to start an authentication workflow with your Azure Active Directory B2C tenant.

Poznámka

Pokud ještě nemáte předplatné Azure, vytvořte si bezplatný účet před tím, než začnete.If you don't have an Azure subscription, create a free account before you begin.

Azure Active Directory B2C podporuje více zprostředkovatelů identity včetně Microsoftu, GitHubu, Facebooku, Twitteru a dalších.Azure Active Directory B2C supports multiple identity providers including Microsoft, GitHub, Facebook, Twitter and more. Další informace o funkcích Azure Active Directory B2C najdete v dokumentaci k Azure Active Directory B2C.For more information on Azure Active Directory B2C capabilities, see Azure Active Directory B2C Documentation.

Knihovna Microsoft Authentication Library podporuje více architektur aplikací a platforem.Microsoft Authentication Library supports multiple application architectures and platforms. Informace o schopnostech MSAL najdete v tématu Microsoft Authentication Library na GitHubu.For information about MSAL capabilities, see Microsoft Authentication Library on GitHub.

Konfigurace tenanta Azure Active Directory B2CConfigure an Azure Active Directory B2C tenant

Chcete-li spustit vzorový projekt, je nutné vytvořit klienta Azure Active Directory B2C.To run the sample project, you must create an Azure Active Directory B2C tenant. Další informace najdete v tématu Vytvoření klienta Azure Active Directory B2C v Azure Portal.For more information, see Create an Azure Active Directory B2C tenant in the Azure portal.

Po vytvoření tenanta budete potřebovat název tenanta a ID tenanta pro konfiguraci mobilní aplikace.Once you create a tenant, you will need the tenant name and tenant ID to configure the mobile application. ID a název tenanta jsou definované doménou vygenerovanou při vytváření adresy URL tenanta.The tenant ID and name are defined by the domain generated when you created your tenant URL. Pokud je vaše generovaná adresa URL https://contoso20190410tenant.onmicrosoft.com/ TENANTA ID tenanta contoso20190410tenant.onmicrosoft.com a název tenanta je contoso20190410tenant .If your generated tenant URL is https://contoso20190410tenant.onmicrosoft.com/ the tenant ID is contoso20190410tenant.onmicrosoft.com and the tenant name is contoso20190410tenant. Kliknutím na Filtr adresářů a odběrů v horní nabídce Najděte doménu tenanta v Azure Portal.Find the tenant domain in the Azure portal by clicking the directory and subscription filter in the top menu. Následující snímek obrazovky ukazuje tlačítko filtru Azure Directory a Subscription a doménu tenanta:The following screenshot shows the Azure directory and subscription filter button and the tenant domain:

Název tenanta v zobrazení filtru předplatného Azure a v adresáři AzureTenant name in the Azure directory and subscription filter view

V ukázkovém projektu upravte soubor Constants.cs a nastavte tenantName tenantId pole a.In the sample project, edit the Constants.cs file to set the tenantName and tenantId fields. Následující kód ukazuje, jak mají být tyto hodnoty nastaveny, pokud je vaše doména tenanta https://contoso20190410tenant.onmicrosoft.com/ , nahraďte tyto hodnoty hodnotami z vašeho portálu:The following code shows how these values should be set if your tenant domain is https://contoso20190410tenant.onmicrosoft.com/, replace these values with values from your portal:

public static class Constants
{
    static readonly string tenantName = "contoso20190410tenant";
    static readonly string tenantId = "contoso20190410tenant.onmicrosoft.com";
    ...
}

Zaregistrujte si mobilní aplikaci pomocí Azure Active Directory B2CRegister your mobile application with Azure Active Directory B2C

Aby bylo možné připojit a ověřit uživatele, musí být mobilní aplikace registrována u tenanta.A mobile application must be registered with the tenant before it can connect and authenticate users. Proces registrace přiřadí aplikaci jedinečné ID aplikace a adresu URL pro přesměrování , která směruje odpovědi zpět do aplikace po ověření.The registration process assigns a unique Application ID to the application, and a Redirect URL that directs responses back to the application after authentication. Další informace najdete v tématu Azure Active Directory B2C: registrace aplikace.For more information, see Azure Active Directory B2C: Register your application. Budete potřebovat znát ID aplikace přiřazené k vaší aplikaci, která je uvedena po názvu aplikace v zobrazení vlastností.You will need to know the Application ID assigned to your application, which is listed after the application name in the properties view. Následující snímek obrazovky ukazuje, kde najít ID aplikace:The following screenshot shows where to find the Application ID:

ID aplikace v zobrazení vlastností aplikace AzureApplication ID in the Azure application properties view

Knihovna Microsoft Authentication Library očekává, že Adresa URL pro přesměrování vaší aplikace bude vaším ID aplikace s textem "msal" a následováním koncového bodu s názvem "auth".Microsoft Authentication Library expects the Redirect URL for your application to be your Application ID prefixed with the text "msal", and followed by an endpoint called "auth". Pokud je ID vaší aplikace "1234abcd", měla by být úplná adresa URL msal1234abcd://auth .If your Application ID is "1234abcd", the full URL should be msal1234abcd://auth. Ujistěte se, že vaše aplikace povolila nastavení nativního klienta a vytvoří vlastní identifikátor URI pro přesměrování pomocí ID aplikace, jak je znázorněno na následujícím snímku obrazovky:Make sure that your application has enabled the Native client setting and create a Custom Redirect URI using your Application ID as shown in the following screenshot:

Vlastní identifikátor URI přesměrování v zobrazení vlastností aplikace Azure

Adresa URL se použije později v ApplicationManifest.xml Androidu i v souboru info. plist.The URL will be used later in both the Android ApplicationManifest.xml and the iOS Info.plist.

V ukázkovém projektu upravte soubor Constants.cs a nastavte clientId pole na ID vaší aplikace.In the sample project, edit the Constants.cs file to set the clientId field to your Application ID. Následující kód ukazuje, jak by tato hodnota měla být nastavena, pokud je ID aplikace 1234abcd :The following code shows how this value should be set if your Application ID is 1234abcd:

public static class Constants
{
    static readonly string tenantName = "contoso20190410tenant";
    static readonly string tenantId = "contoso20190410tenant.onmicrosoft.com";
    static readonly string clientId = "1234abcd";
    ...
}

Vytvoření zásad registrace a přihlášení a zapomenutých zásad heselCreate sign-up and sign-in policies, and forgot password policies

Zásada je činnost, kterou uživatelé přejdou, aby dokončili úkol, jako je například vytvoření účtu nebo resetování hesla.A policy is an experience users go through to complete a task such as creating an account or resetting a password. Zásada také určuje obsah tokenů, které aplikace obdrží, když se uživatel vrátí z prostředí.A policy also specifies the contents of tokens the application receives when the user returns from the experience. Je nutné nastavit zásady pro registraci a přihlášení účtu a resetování hesla.You must set up policies for both account sign-up and sign-in, and reset password. Azure obsahuje integrované zásady, které zjednodušují vytváření běžných zásad.Azure has built-in policies that simplify creation of common policies. Další informace najdete v tématu Azure Active Directory B2C: předdefinované zásady.For more information, see Azure Active Directory B2C: Built-in policies.

Po dokončení nastavení zásad byste měli mít dvě zásady v zobrazení toky uživatelů (zásady) v Azure Portal.When you've completed policy setup, you should have two policies in the User flows (policies) view in the Azure portal. Následující snímek obrazovky ukazuje dvě nakonfigurované zásady v Azure Portal:The following screenshot demonstrates two configured policies in the Azure portal:

Dvě nakonfigurované zásady v zobrazení uživatelských toků Azure (zásady)

V ukázkovém projektu upravte soubor Constants.cs a nastavte policySignin pole a tak, policyPassword aby odrážela názvy, které jste zvolili během nastavení zásad:In the sample project, edit the Constants.cs file to set the policySignin and policyPassword fields to reflect the names you chose during policy setup:

public static class Constants
{
    static readonly string tenantName = "contoso20190410tenant";
    static readonly string tenantId = "contoso20190410tenant.onmicrosoft.com";
    static readonly string clientId = "1234abcd";
    static readonly string policySignin = "B2C_1_signupsignin1";
    static readonly string policyPassword = "B2C_1_passwordreset";
    ...
}

Pro ověřování použít knihovnu Microsoft Authentication Library (MSAL)Use the Microsoft Authentication Library (MSAL) for authentication

Balíček NuGet Microsoft Authentication Library (MSAL) se musí přidat do projektu Shared, .NET Standard Project a Platform v :::no-loc(Xamarin.Forms)::: řešení.The Microsoft Authentication Library (MSAL) NuGet package must be added to the shared, .NET Standard project, and the platform projects in a :::no-loc(Xamarin.Forms)::: solution. MSAL obsahuje PublicClientApplicationBuilder třídu, která vytvoří objekt, který dodržuje IPublicClientApplication rozhraní.MSAL includes a PublicClientApplicationBuilder class that constructs an object adhering to the IPublicClientApplication interface. MSAL využívá With klauzule k poskytnutí dalších parametrů konstruktoru a metodám ověřování.MSAL utilizes With clauses to supply additional parameters to the constructor and authentication methods.

V ukázkovém projektu kód na pozadí pro App. XAML definuje statické vlastnosti pojmenované AuthenticationClient a a UIParent vytvoří instanci AuthenticationClient objektu v konstruktoru.In the sample project, the code behind for App.xaml defines static properties named AuthenticationClient and UIParent, and instantiates the AuthenticationClient object in the constructor. WithIosKeychainSecurityGroupKlauzule poskytuje název skupiny zabezpečení pro aplikace iOS.The WithIosKeychainSecurityGroup clause provides a security group name for iOS applications. WithB2CAuthorityKlauzule poskytuje výchozí autoritu neboli zásadu, která se použije k ověřování uživatelů.The WithB2CAuthority clause provides the default Authority , or policy, that will be used to authenticate users. WithRedirectUriKlauzule Instruuje instanci služby Azure Notification Hubs, která identifikátor URI přesměrování použije, pokud je zadáno více identifikátorů URI.The WithRedirectUri clause tells the Azure Notification Hubs instance which Redirect URI to use if multiple URIs are specified. Následující příklad ukazuje, jak vytvořit instanci PublicClientApplication :The following example demonstrates how to instantiate the PublicClientApplication:

public partial class App : Application
{
    public static IPublicClientApplication AuthenticationClient { get; private set; }

    public static object UIParent { get; set; } = null;

    public App()
    {
        InitializeComponent();

        AuthenticationClient = PublicClientApplicationBuilder.Create(Constants.ClientId)
            .WithIosKeychainSecurityGroup(Constants.IosKeychainSecurityGroups)
            .WithB2CAuthority(Constants.AuthoritySignin)
            .WithRedirectUri($"msal{Constants.ClientId}://auth")
            .Build();

        MainPage = new NavigationPage(new LoginPage());
    }

    ...

Poznámka

Pokud má instance Azure Notification Hubs jenom jeden identifikátor URI pro přesměrování, AuthenticationClient může instance fungovat bez zadání identifikátoru URI přesměrování s WithRedirectUri klauzulí.If your Azure Notification Hubs instance only has one Redirect URI defined, the AuthenticationClient instance may work without specifying the Redirect URI with the WithRedirectUri clause. Tuto hodnotu byste ale měli vždycky zadat pro případ, že se konfigurace Azure rozšíří na podporu jiných klientů nebo metod ověřování.However, you should always specify this value in case your Azure configuration expands to support other clients or authentication methods.

OnAppearingObslužná rutina události v LoginPage.XAML.cs kódu za volání AcquireTokenSilentAsync aktualizuje ověřovací token pro uživatele, kteří se předtím přihlásili.The OnAppearing event handler in the LoginPage.xaml.cs code behind calls AcquireTokenSilentAsync to refresh the authentication token for users that have logged in before. Proces ověřování přesměrovává na v LogoutPage případě úspěchu a neprovede nic při selhání.The authentication process redirects to the LogoutPage if successful and does nothing on failure. Následující příklad ukazuje proces tichého opakovaného ověření v nástroji OnAppearing :The following example shows the silent reauthentication process in OnAppearing:

public partial class LoginPage : ContentPage
{
    ...

    protected override async void OnAppearing()
    {
        try
        {
            // Look for existing account
            IEnumerable<IAccount> accounts = await App.AuthenticationClient.GetAccountsAsync();

            AuthenticationResult result = await App.AuthenticationClient
                .AcquireTokenSilent(Constants.Scopes, accounts.FirstOrDefault())
                .ExecuteAsync();

            await Navigation.PushAsync(new LogoutPage(result));
        }
        catch
        {
            // Do nothing - the user isn't logged in
        }
        base.OnAppearing();
    }

    ...
}

OnLoginButtonClickedObslužná rutina události (aktivovaná při kliknutí na tlačítko pro přihlášení) volá AcquireTokenAsync .The OnLoginButtonClicked event handler (fired when the Login button is clicked) calls AcquireTokenAsync. Knihovna MSAL automaticky otevře prohlížeč mobilních zařízení a přejde na přihlašovací stránku.The MSAL library automatically opens the mobile device browser and navigates to the login page. Přihlašovací adresa URL označovaná jako autorita je kombinací názvu tenanta a zásad definovaných v souboru Constants.cs .The sign-in URL, called an Authority , is a combination of the tenant name and policies defined in the Constants.cs file. Pokud uživatel zvolí možnost zapomenuté heslo, vrátí se do aplikace s výjimkou, která spustí možnosti zapomenuté heslo.If the user chooses the forgot password option, they are returned to the app with an exception, which launches the forgot password experience. Následující příklad ukazuje proces ověřování:The following example shows the authentication process:

public partial class LoginPage : ContentPage
{
    ...

    async void OnLoginButtonClicked(object sender, EventArgs e)
    {
        AuthenticationResult result;
        try
        {
            result = await App.AuthenticationClient
                .AcquireTokenInteractive(Constants.Scopes)
                .WithPrompt(Prompt.SelectAccount)
                .WithParentActivityOrWindow(App.UIParent)
                .ExecuteAsync();

            await Navigation.PushAsync(new LogoutPage(result));
        }
        catch (MsalException ex)
        {
            if (ex.Message != null && ex.Message.Contains("AADB2C90118"))
            {
                result = await OnForgotPassword();
                await Navigation.PushAsync(new LogoutPage(result));
            }
            else if (ex.ErrorCode != "authentication_canceled")
            {
                await DisplayAlert("An error has occurred", "Exception message: " + ex.Message, "Dismiss");
            }
        }
    }

    ...
}

OnForgotPasswordMetoda je podobná procesu přihlašování, ale implementuje vlastní zásady.The OnForgotPassword method is similar to the sign-in process but implements a custom policy. OnForgotPassword používá jiné přetížení AcquireTokenAsync , které umožňuje poskytnout konkrétní autoritu.OnForgotPassword uses a different overload of AcquireTokenAsync, which allows you to provide a specific Authority. Následující příklad ukazuje, jak při získání tokenu dodat vlastní autoritu :The following example shows how to supply a custom Authority when acquiring a token:

public partial class LoginPage : ContentPage
{
    ...
    async Task<AuthenticationResult> OnForgotPassword()
    {
        try
        {
            return await App.AuthenticationClient
                .AcquireTokenInteractive(Constants.Scopes)
                .WithPrompt(Prompt.SelectAccount)
                .WithParentActivityOrWindow(App.UIParent)
                .WithB2CAuthority(Constants.AuthorityPasswordReset)
                .ExecuteAsync();
        }
        catch (MsalException)
        {
            // Do nothing - ErrorCode will be displayed in OnLoginButtonClicked
            return null;
        }
    }
}

Poslední část ověřování je proces odhlašování.The final piece of authentication is the sign out process. OnLogoutButtonClickedMetoda je volána, když uživatel stiskne tlačítko Odhlásit.The OnLogoutButtonClicked method is called when the user presses the sign out button. Prochází všemi účty a zajišťuje jejich neplatnost.It loops through all accounts and ensures their tokens have been invalidated. Následující ukázka demonstruje implementaci odhlášení:The sample below demonstrates the sign out implementation:

public partial class LogoutPage : ContentPage
{
    ...
    async void OnLogoutButtonClicked(object sender, EventArgs e)
    {
        IEnumerable<IAccount> accounts = await App.AuthenticationClient.GetAccountsAsync();

        while (accounts.Any())
        {
            await App.AuthenticationClient.RemoveAsync(accounts.First());
            accounts = await App.AuthenticationClient.GetAccountsAsync();
        }

        await Navigation.PopAsync();
    }
}

iOSiOS

V systému iOS musí být vlastní schéma adresy URL registrované v Azure Active Directory B2C zaregistrované v souboru info. plist.On iOS, the custom URL scheme that was registered with Azure Active Directory B2C must be registered in Info.plist. MSAL očekává, že schéma URL bude vyhovovat konkrétnímu vzoru popsanému dříve v části registrace mobilní aplikace pomocí Azure Active Directory B2C.MSAL expects the URL scheme to adhere to a specific pattern, described previously in Register your mobile application with Azure Active Directory B2C. Následující snímek obrazovky ukazuje vlastní schéma adresy URL v souboru info. plist.The following screenshot shows the custom URL scheme in Info.plist.

"Registrace vlastního schématu adresy URL v iOS"

MSAL také vyžaduje v iOS nároky na řetězce klíčů, které jsou zaregistrované v Entitilements. plist , jak je znázorněno na následujícím snímku obrazovky:MSAL also requires Keychain Entitlements on iOS, registered in the Entitilements.plist , as shown in the following screenshot:

"Nastavení oprávnění aplikace v iOS"

Až Azure Active Directory B2C požadavek na autorizaci dokončí, přesměruje na registrovanou adresu URL pro přesměrování.When Azure Active Directory B2C completes the authorization request, it redirects to the registered redirect URL. Vlastní schéma URL má za následek spuštění mobilní aplikace a předání v adrese URL jako parametr spuštění, kde je zpracováno OpenUrl přepsáním AppDelegate třídy aplikace a vrátí kontrolu nad prostředím pro MSAL.The custom URL scheme results in iOS launching the mobile application and passing in the URL as a launch parameter, where it's processed by the OpenUrl override of the application's AppDelegate class, and returns control of the experience to MSAL. OpenUrlImplementace je zobrazená v následujícím příkladu kódu:The OpenUrl implementation is shown in the following code example:

using Microsoft.Identity.Client;

namespace TodoAzure.iOS
{
    [Register("AppDelegate")]
    public partial class AppDelegate : global:::::no-loc(Xamarin.Forms):::.Platform.iOS.FormsApplicationDelegate
    {
        ...
        public override bool OpenUrl(UIApplication app, NSUrl url, NSDictionary options)
        {
            AuthenticationContinuationHelper.SetAuthenticationContinuationEventArgs(url);
            return base.OpenUrl(app, url, options);
        }
    }
}

AndroidAndroid

V Androidu musí být v AndroidManifest.xml zaregistrované vlastní schéma adresy URL, které je zaregistrované v Azure Active Directory B2C.On Android, the custom URL scheme that was registered with Azure Active Directory B2C must be registered in the AndroidManifest.xml. MSAL očekává, že schéma URL bude vyhovovat konkrétnímu vzoru popsanému dříve v části registrace mobilní aplikace pomocí Azure Active Directory B2C.MSAL expects the URL scheme to adhere to a specific pattern, described previously in Register your mobile application with Azure Active Directory B2C. Následující příklad ukazuje vlastní schéma adresy URL v AndroidManifest.xml.The following example shows the custom URL scheme in the AndroidManifest.xml.

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="1" android:versionName="1.0" package="com.xamarin.adb2cauthorization">
  <uses-sdk android:minSdkVersion="15" />
  <application android:label="ADB2CAuthorization">
    <activity android:name="microsoft.identity.client.BrowserTabActivity">
      <intent-filter>
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
        <!-- example -->
        <!-- <data android:scheme="msalaaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee" android:host="auth" /> -->
        <data android:scheme="INSERT_URI_SCHEME_HERE" android:host="auth" />
      </intent-filter>
    </activity>"
  </application>
</manifest>

MainActivityTřída musí být upravena, aby poskytovala UIParent objektu aplikaci během OnCreate volání.The MainActivity class must be modified to provide the UIParent object to the application during the OnCreate call. Když Azure Active Directory B2C žádost o autorizaci dokončí, přesměruje na zaregistrované schéma adresy URL z AndroidManifest.xml.When Azure Active Directory B2C completes the authorization request, it redirects to the registered URL scheme from the AndroidManifest.xml. Výsledkem zaregistrovaného schématu identifikátoru URI v Androidu je volání OnActivityResult metody s adresou URL jako parametr spuštění, kde je zpracována SetAuthenticationContinuationEventArgs metodou.The registered URI scheme results in Android calling the OnActivityResult method with the URL as a launch parameter, where it's processed by the SetAuthenticationContinuationEventArgs method.

public class MainActivity : FormsAppCompatActivity
{
    protected override void OnCreate(Bundle bundle)
    {
        TabLayoutResource = Resource.Layout.Tabbar;
        ToolbarResource = Resource.Layout.Toolbar;

        base.OnCreate(bundle);

        Forms.Init(this, bundle);
        LoadApplication(new App());
        App.UIParent = this;
    }

    protected override void OnActivityResult(int requestCode, Result resultCode, Intent data)
    {
        base.OnActivityResult(requestCode, resultCode, data);
        AuthenticationContinuationHelper.SetAuthenticationContinuationEventArgs(requestCode, resultCode, data);
    }
}

Univerzální platforma WindowsUniversal Windows Platform

K používání MSAL na Univerzální platforma Windows se nevyžaduje žádné další nastavení.No additional setup is required to use MSAL on the Universal Windows Platform

Spuštění projektuRun the project

Spusťte aplikaci na virtuálním nebo fyzickém zařízení.Run the application on a virtual or physical device. Klepnutí na tlačítko pro přihlášení by měl otevřít prohlížeč a přejít na stránku, kde se můžete přihlásit nebo vytvořit účet.Tapping the Login button should open the browser and navigate to a page where you can sign in or create an account. Po dokončení procesu přihlašování byste měli být vráceni na stránku pro odhlášení aplikace.After completing the sign in process, you should be returned to the application's logout page. Na následujícím snímku obrazovky vidíte přihlašovací obrazovku uživatele běžící na Androidu a v iOS:The following screenshot shows the user sign in screen running on Android and iOS:

Přihlašovací obrazovka Azure ADB2C pro Android a iOS