Azure Active Directory B2C ile Kullanıcıların Kimliğini Doğrulama

Örneği İndir Örneği indirme

Azure Active Directory B2C, tüketiciye yönelik web uygulamaları ve mobil uygulamalar için bulut kimlik yönetimi sağlar. Bu makalede, kimlik yönetimini Microsoft Azure Active Directory Kitaplığı ile bir mobil uygulamayla tümleştirin ve B2C'yi nasıl kullanabileceğiniz açıklanmıştır.

Genel Bakış

Azure Active Directory B2C (ADB2C), tüketiciye yönelik uygulamalar için bir kimlik yönetimi hizmetidir. Kullanıcıların mevcut sosyal hesaplarını veya e-posta ya da kullanıcı adı ve parola gibi özel kimlik bilgilerini kullanarak uygulamanıza oturum açmalarına olanak sağlar. Özel kimlik bilgileri hesapları yerel hesaplar olarak adlandırılır.

B2C kimlik Azure Active Directory hizmetini bir mobil uygulamayla tümleştirme işlemi aşağıdaki gibidir:

  1. B2C Azure Active Directory bir kiracı oluşturun.
  2. Mobil uygulamalarınızı B2C Azure Active Directory kaydetme.
  3. Kaydolma ve oturum açma ilkeleri oluşturun ve parola kullanıcı akışlarını unuttum.
  4. B2C kiracınız ile bir kimlik doğrulama iş akışı başlatmak için Microsoft Kimlik Azure Active Directory Kitaplığı'Azure Active Directory kullanın.

Not

Azure aboneliğiniz yoksa başlamadan önce ücretsiz bir hesap oluşturun.

Azure Active Directory B2C; Microsoft, GitHub, Facebook, Twitter ve daha fazlası dahil olmak üzere birden çok kimlik sağlayıcısını destekler. B2C özelliklerini Azure Active Directory daha fazla bilgi için B2C Azure Active Directory bakın.

Microsoft Authentication Library birden çok uygulama mimarisini ve platformlarını destekler. MSAL özellikleri hakkında bilgi için bkz. Microsoft Kimlik Doğrulama Kitaplığı GitHub.

B2C Azure Active Directory yapılandırma

Örnek projeyi çalıştırmak için bir B2C kiracısı Azure Active Directory oluşturmanız gerekir. Daha fazla bilgi için bkz. Azure Active Directory B2C kiracısı Azure portal.

Bir kiracı oluşturdukta, mobil uygulamayı yapılandırmak için kiracıadı ve kiracı kimliği gerekir. Kiracı kimliği ve adı, kiracı URL'nizi oluşturulduğunda oluşturulan etki alanı tarafından tanımlanır. Oluşturulan kiracı URL'niz kiracı https://contoso20190410tenant.onmicrosoft.com/https://contoso20190410tenant.onmicrosoft.com/ ve kiracı contoso20190410tenant.onmicrosoft.com adı contoso20190410tenant.onmicrosoft.comcontoso20190410tenant Üst menüde dizine ve Azure portal filtreye tıklayarak kiracı etki alanını bulun. Aşağıdaki ekran görüntüsünde Azure dizini ve abonelik filtresi düğmesi ile kiracı etki alanı yer alır:

Azure dizin ve abonelik filtresi görünümünde kiracı adı

Örnek projede, ve alanlarını ayarlamak için Constants.cs dosyasını tenantId düzenleyin. Aşağıdaki kod, kiracı etki alanınız ise bu değerlerin nasıl ayar olacağını gösterir. Bu değerleri https://contoso20190410tenant.onmicrosoft.com/ portaldan gelen değerlerle değiştirin:

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

Mobil uygulamalarınızı Azure Active Directory B2C'ye kaydetme

Mobil uygulamanın, kullanıcılara bağlanamadan ve kullanıcıların kimliğini doğrulamadan önce kiracıya kayıtlı olması gerekir. Kayıt işlemi uygulamaya benzersiz bir Uygulama Kimliği ve kimlik doğrulaması sonrasında yanıtları uygulamaya geri yönlendiren bir Yeniden Yönlendirme URL'si atar. Daha fazla bilgi için bkz. Azure Active Directory B2C: Uygulamanızı kaydetme. Uygulamanıza atanan Uygulama Kimliği'nin, özellikler görünümünde uygulama adının ardından listelenmiş olduğunu bilmek gerekir. Aşağıdaki ekran görüntüsünde Uygulama Kimliğinin nerede bulun olduğu gösterir:

Azure uygulama özellikleri görünümünde uygulama kimliği

Microsoft Kimlik Doğrulama Kitaplığı, "msal" metninin ve ardından "auth" adlı bir uç noktanın ön ekini kullanarak, uygulamanıza uygun Yeniden Yönlendirme URL'sinin Uygulama Kimliğiniz olmasını bekler. Uygulama Kimliğiniz "1234abcd" ise tam URL msal1234abcd://auth olmalıdır. Aşağıdaki ekran görüntüsünde gösterildiği gibi, uygulamanın Yerel istemci ayarını etkinleştirmiş olduğundan emin olun ve Uygulama Kimliğinizi kullanarak Özel Yeniden Yönlendirme URI'sini oluşturun:

Azure uygulama özellikleri görünümünde Özel Yeniden Yönlendirme URI'si

URL daha sonra hem AndroidApplicationManifest.xmlhem de iOS Info.plist içinde kullanılacaktır.

Örnek projede, Alanını Uygulama Kimliği olarak ayarlamak için Constants.csdosyasını düzenleyin. Aşağıdaki kod, Uygulama Kimliğiniz ise bu değerin nasıl ayar olacağını 1234abcd gösterir:

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

Kaydolma ve oturum açma ilkeleri oluşturma ve parola ilkelerini unutma

İlke, kullanıcıların hesap oluşturma veya parola sıfırlama gibi bir görevi tamamlamak için geçen bir deneyimdir. İlke, kullanıcı deneyimden döndüğünde uygulamanın aldığı belirteçlerin içeriğini de belirtir. Hem hesap kaydolma hem de oturum açma ve parola sıfırlama için ilkeler ayarlamelisiniz. Azure'da ortak ilkelerin oluşturulmasını kolaylaştıran yerleşik ilkeler vardır. Daha fazla bilgi için bkz. Azure Active Directory B2C: Yerleşik ilkeler.

İlke kurulumunu tamamlandıktan sonra, uygulamanın Kullanıcı akışları (ilkeler) görünümünde iki ilkeniz Azure portal. Aşağıdaki ekran görüntüsünde, uygulamanın iki yapılandırılmış Azure portal:

Azure Kullanıcı akışları (ilkeler) görünümünde yapılandırılmış iki ilke

Örnek projede, ve alanlarını ilke kurulumu sırasında seçtiğiniz adları yansıtacak şekilde ayarlamak için Constants.cspolicyPassword dosyasını düzenleyin:

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";
    ...
}

Kimlik doğrulaması için Microsoft Authentication Library'i (MSAL) kullanma

Microsoft Authentication Library (MSAL) NuGet paketi bir çözümde paylaşılan, .NET Standard platform projelerine Xamarin.Forms eklenmiştir. MSAL, PublicClientApplicationBuilder arabirime bitişik bir nesne oluşturmak için bir sınıf IPublicClientApplication içerir. MSAL, oluşturucu With ve kimlik doğrulama yöntemlerine ek parametreler sağlamak için yan tümceleri kullanır.

Örnek projede, App.xaml'nin arkasındaki kod ve adlı statik özellikleri tanımlar ve UIParent oluşturucuda AuthenticationClient nesnesinin örneğini oluşturur. yan WithIosKeychainSecurityGroup tümcesi, iOS uygulamaları için bir güvenlik grubu adı sağlar. yan WithB2CAuthority tümcesi, WithB2CAuthoritydoğrulamak için kullanılacak varsayılan Yetkili veya ilkeyi sağlar. yan tümcesi Azure Notification Hubs birden çok URI belirtilirse hangi Yeniden Yönlendirme WithRedirectUri URI'sini kullanabileceğini belirtir. Aşağıdaki örnekte, örneği nasıl gerçekleştirin? 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());
    }

    ...

Not

Azure Notification Hubs yalnızca bir Yeniden Yönlendirme URI'sine sahipse örnek, yan tümcesi ile Yeniden Yönlendirme AuthenticationClient URI'sini belirtmeden WithRedirectUri çalışır. Bununla birlikte, Azure yapılandırmanız diğer istemcileri veya kimlik doğrulama yöntemlerini destekleyecek şekilde genişlerken her zaman bu değeri belirtmeniz gerekir.

Daha önce oturum açmış kullanıcılar için kimlik OnAppearingOnAppearing kodundaki AcquireTokenSilentAsync olay işleyicisi. Kimlik doğrulama işlemi başarılı olursa LogoutPage 'a yeniden yönlendirme yapar ve hata durumunda hiçbir şey yapar. Aşağıdaki örnek, içinde sessiz yeniden kimlik doğrulama işlemini OnAppearing gösterir:

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

    ...
}

Olay OnLoginButtonClicked işleyicisi (Oturum Aç düğmesine tıkıldığında başlatıldı) çağrısında AcquireTokenAsync bulundu. MSAL kitaplığı otomatik olarak mobil cihaz tarayıcısını açar ve oturum açma sayfasına gidilir. Yetkili olarak adlandırılan oturum açma URL'si,Constants.cs dosyasında tanımlanan kiracı adı ve ilkelerin birleşimidir. Kullanıcı parolayı unuttu seçeneğini seçerse, parolayı unuttu deneyimini başlatan bir özel durumla uygulamaya geri döndürülür. Aşağıdaki örnek, kimlik doğrulama işlemini gösterir:

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

    ...
}

yöntemi, OnForgotPassword oturum açma işlemiyle benzerdir ancak özel bir ilke uygulamaz. OnForgotPassword, belirli bir Yetkiliyi AcquireTokenAsync sağlamayı sağlayan farklı bir aşırı OnForgotPassword Aşağıdaki örnekte, belirteç edinilen bir özel Yetkilinin nasıl belirtecine sahip olduğu gösterir:

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

Kimlik doğrulamasının son parçası, oturum açma işlemidir. Kullanıcı OnLogoutButtonClicked oturum açma düğmesine basıldığında yöntemi çağrılır. Tüm hesaplarda döngüye alır ve belirteçlerinin geçersiz kılınmalarını sağlar. Aşağıdaki örnekte oturum açma uygulaması gösterilmiştir:

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

iOS

iOS'ta, B2C'ye Azure Active Directory özel URL şeması Info.plist'te kayıtlı olmalıdır. MSAL, URL şemasının daha önce B2C'yemobil uygulama kaydetme konusunda açıklanan belirli bir Azure Active Directory bekler. Aşağıdaki ekran görüntüsünde Info.plist'teözel URL şemasını görebilirsiniz.

MSAL ayrıca, aşağıdaki ekran görüntüsünde gösterildiği gibi iOS'ta Entitilements.plist'ekayıtlı Anahtarlık Yetkilendirmeleri gerektirir:

B2C Azure Active Directory yetkilendirme isteğini tamamlandıktan sonra kayıtlı yeniden yönlendirme URL'sini yeniden yönlendirer. Özel URL düzeni, iOS'un mobil uygulamayı başlatması ve URL'yi uygulama sınıfının geçersiz kılınarak işlenmeleri için başlatma parametresi olarak geçirmesi ile sonuç verir ve deneyimin denetimlerini OpenUrlAppDelegate MSAL'ye döndürür. Uygulama OpenUrl aşağıdaki kod örneğinde gösterilmiştir:

using Microsoft.Identity.Client;

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

Android

Android'de, Azure Active Directory B2C ile kaydedilen özel URL şeması, AndroidManifest.xml. MSAL, URL şemasının daha önce B2C'yemobil uygulama kaydetme konusunda açıklanan belirli bir Azure Active Directory bekler. Aşağıdaki örnekte, 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>

sınıfı, MainActivity çağrı sırasında uygulamaya nesnesini sağlamak için UIParentOnCreate değiştirilmelidir. B2C Azure Active Directory yetkilendirme isteğini tamamlandıktan sonra, kimlik doğrulamadan kayıtlı URL düzenine AndroidManifest.xml. Kayıtlı URI şeması, Android'in url'si ile yöntemini yöntemi tarafından işlenen bir başlatma parametresi OnActivityResult olarak çağırarak SetAuthenticationContinuationEventArgs sonuç verir.

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

Evrensel Windows Platformu

Universal Windows Platform'da MSAL kullanmak için ek kurulum gerekmez

Projeyi çalıştırma

Uygulamayı sanal veya fiziksel bir cihazda çalıştırın. Oturum aç düğmesine dokunulduğunda tarayıcı açılır ve oturum açabilirsiniz veya hesap oluşturabilirsiniz bir sayfaya gidin. Oturum açma işlemini tamamladıktan sonra uygulamanın oturum açma sayfasına döndürülebilirsiniz. Aşağıdaki ekran görüntüsünde Android ve iOS üzerinde çalışan kullanıcı oturum açma ekranı gösterilir: