Aracılığıyla paylaş


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

Azure Active Directory B2C, tüketiciye yönelik web ve mobil uygulamalar için bulut kimlik yönetimi sağlar. Bu makalede, kimlik yönetimini Microsoft Kimlik Doğrulama Kitaplığı ile bir mobil uygulamayla tümleştirmek için Azure Active Directory B2C'nin nasıl kullanılacağı gösterilmektedir.

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 veya kullanıcı adı ve parola gibi özel kimlik bilgilerini kullanarak uygulamanızda oturum açmasına olanak tanır. Özel kimlik bilgisi hesapları yerel hesaplar olarak adlandırılır.

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

  1. Azure Active Directory B2C kiracısı oluşturun.
  2. Mobil uygulamanızı Azure Active Directory B2C kiracısıyla kaydedin.
  3. Kaydolmak ve oturum açmak için ilkeler oluşturun ve parola kullanıcı akışlarını unutun.
  4. Azure Active Directory B2C kiracınızla bir kimlik doğrulama iş akışı başlatmak için Microsoft Kimlik Doğrulama Kitaplığı'nı (MSAL) 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. Azure Active Directory B2C özellikleri hakkında daha fazla bilgi için bkz . Azure Active Directory B2C Belgeleri.

Microsoft Kimlik Doğrulama Kitaplığı birden çok uygulama mimarisini ve platformu destekler. MSAL özellikleri hakkında bilgi için bkz . GitHub'da Microsoft Kimlik Doğrulama Kitaplığı .

Azure Active Directory B2C kiracısı yapılandırma

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

Bir kiracı oluşturduktan sonra, mobil uygulamayı yapılandırmak için kiracı adına ve kiracı kimliğine ihtiyacınız olacaktır. Kiracı kimliği ve adı, kiracı URL'nizi oluştururken oluşturulan etki alanı tarafından tanımlanır. Oluşturduğunuz kiracı URL'si kiracı kimliği ve contoso20190410tenant.onmicrosoft.comkiracı adı ise olurcontoso20190410tenant.https://contoso20190410tenant.onmicrosoft.com/ Üst menüdeki dizin ve abonelik filtresine tıklayarak Azure portalında 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ı gösterilmektedir:

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

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

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

Mobil uygulamanızı Azure Active Directory B2C'ye kaydetme

Bir mobil uygulamanın bağlanabilmesi ve kullanıcıların kimliğini doğrulayabilmesi için önce kiracıya kaydedilmesi gerekir. Kayıt işlemi uygulamaya benzersiz bir Uygulama Kimliği atar ve kimlik doğrulamasından sonra 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. Özellikler görünümünde uygulama adından sonra listelenen uygulamanıza atanan Uygulama Kimliğini bilmeniz gerekir. Aşağıdaki ekran görüntüsünde Uygulama Kimliğinin nerede bulunacağı gösterilmektedir:

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

Microsoft Kimlik Doğrulama Kitaplığı, uygulamanızın Yeniden Yönlendirme URL'sinin "msal" metniyle ön ekli Uygulama Kimliğiniz olmasını ve ardından "auth" adlı bir uç nokta olmasını bekler. Uygulama Kimliğiniz "1234abcd" ise, tam URL olmalıdır msal1234abcd://auth. Uygulamanızın Yerel istemci ayarını etkinleştirdiğinden emin olun ve aşağıdaki ekran görüntüsünde gösterildiği gibi Uygulama Kimliğinizi kullanarak bir Özel Yeniden Yönlendirme URI'si oluşturun:

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

URL daha sonra hem Android ApplicationManifest.xml hem de iOS Info.plist'te kullanılacaktır.

Örnek projede, alanı Uygulama Kimliğinize ayarlamak için Constants.cs dosyasını düzenleyin.clientId Aşağıdaki kod, Uygulama Kimliğiniz 1234abcdise bu değerin nasıl ayarlanması gerektiğini 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 ilerlediği 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 için ilkeler ayarlamanız ve parolayı sıfırlamanız gerekir. Azure'da ortak ilkelerin oluşturulmasını basitleştiren yerleşik ilkeler vardır. Daha fazla bilgi için bkz . Azure Active Directory B2C: Yerleşik ilkeler.

İlke kurulumunu tamamladığınızda, Azure portalındaki Kullanıcı akışları (ilkeler) görünümünde iki ilkeniz olmalıdır. Aşağıdaki ekran görüntüsünde Azure portalında yapılandırılmış iki ilke gösterilmektedir:

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

Örnek projede, ve policyPassword alanlarını ilke kurulumu sırasında seçtiğiniz adları yansıtacak şekilde ayarlamak policySignin için Constants.cs 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 Kimlik Doğrulama Kitaplığı'nı (MSAL) kullanma

Microsoft Authentication Library (MSAL) NuGet paketi, paylaşılan .NET Standard projesine ve bir Xamarin.Forms çözümdeki platform projelerine eklenmelidir. MSAL, arabirime IPublicClientApplication bağlı bir nesne oluşturan bir sınıf içerirPublicClientApplicationBuilder. MSAL, oluşturucu ve kimlik doğrulama yöntemlerine ek parametreler sağlamak için yan tümceleri kullanır With .

Örnek projede, App.xaml'in arkasındaki kod ve UIParentadlı AuthenticationClient statik özellikleri tanımlar ve oluşturucuda nesnesinin örneğini AuthenticationClient oluşturur. WithIosKeychainSecurityGroup yan tümcesi, iOS uygulamaları için bir güvenlik grubu adı sağlar. WithB2CAuthority yan tümcesi, kullanıcıların kimliğini doğrulamak için kullanılacak varsayılan Yetkiliyi veya ilkeyi sağlar. WithRedirectUri yan tümcesi, Azure Notification Hubs örneğine birden çok URI belirtilirse hangi Yeniden Yönlendirme URI'sinin kullanılacağını bildirir. Aşağıdaki örnekte örneği oluşturma adımları gösterilmektedir 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 örneğinizde tanımlanmış yalnızca bir Yeniden Yönlendirme URI'si varsa, AuthenticationClient yan tümcesiyle Yeniden Yönlendirme URI'sini WithRedirectUri belirtmeden örnek çalışabilir. Ancak Azure yapılandırmanızın diğer istemcileri veya kimlik doğrulama yöntemlerini destekleyecek şekilde genişletilmesi durumunda her zaman bu değeri belirtmeniz gerekir.

Daha OnAppearing önce oturum açmış kullanıcılar için kimlik doğrulama belirtecini yenileme çağrılarının AcquireTokenSilentAsync arkasındaki LoginPage.xaml.cs kodundaki olay işleyicisi. Kimlik doğrulama işlemi başarılı olursa öğesine LogoutPage yönlendirilir ve hata durumunda hiçbir şey yapmaz. Aşağıdaki örnekte içindeki sessiz yeniden kimlik doğrulama işlemi gösterilmektedir 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();
    }

    ...
}

Olay OnLoginButtonClicked işleyicisi (Oturum aç düğmesine tıklandığında tetiklenir) öğesini çağırır AcquireTokenAsync. MSAL kitaplığı, mobil cihaz tarayıcısını otomatik olarak açar ve oturum açma sayfasına gider. Yetkili olarak adlandırılan oturum açma URL'si, Constants.cs dosyasında tanımlanan kiracı adı ve ilkelerinin bir bileşimidir. Kullanıcı parolayı unuttum seçeneğini belirlerse, parolayı unuttum deneyimini başlatan bir özel durumla uygulamaya döndürülür. Aşağıdaki örnekte kimlik doğrulama işlemi gösterilmektedir:

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

    ...
}

OnForgotPassword yöntemi, oturum açma işlemine benzer ancak özel bir ilke uygular. OnForgotPassword, belirli bir Yetkili sağlamanıza olanak tanıyan farklı bir aşırı yükleme AcquireTokenAsynckullanır. Aşağıdaki örnekte, belirteç alırken özel bir Yetkilinin nasıl sağlantığı gösterilmektedir:

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ı oturumu kapatma işlemidir. OnLogoutButtonClicked Kullanıcı oturumu kapat düğmesine bastığında yöntemi çağrılır. Tüm hesaplarda döngü oluşturur ve belirteçlerinin geçersiz kılınmasını sağlar. Aşağıdaki örnekte oturumu kapatma uygulaması gösterilmektedir:

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, Azure Active Directory B2C'ye kaydedilmiş olan özel URL şeması Info.plist'e kaydedilmelidir. MSAL, URL düzeninin daha önce Azure Active Directory B2C'ye mobil uygulamanızı kaydetme bölümünde açıklanan belirli bir desene uymasını bekler. Aşağıdaki ekran görüntüsünde Info.plist dosyasındaki özel URL düzeni gösterilmektedir.

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

Azure Active Directory B2C yetkilendirme isteğini tamamladığında kayıtlı yeniden yönlendirme URL'sine yönlendirilir. Özel URL düzeni, iOS'un AppDelegate mobil uygulamayı başlatmasına ve URL'yi başlatma parametresi olarak geçirmesine neden olur; burada uygulama sınıfının geçersiz kılınarak OpenUrl işlenir ve deneyimin denetimini 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ının AndroidManifest.xml kaydedilmesi gerekir. MSAL, URL düzeninin daha önce Azure Active Directory B2C'ye mobil uygulamanızı kaydetme bölümünde açıklanan belirli bir desene uymasını bekler. Aşağıdaki örnek, AndroidManifest.xml özel URL düzenini gösterir.

<?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>

MainActivity Çağrı sırasında OnCreate uygulamaya nesne sağlamak UIParent için sınıfı değiştirilmelidir. Azure Active Directory B2C yetkilendirme isteğini tamamladığında, AndroidManifest.xml kayıtlı URL düzenine yönlendirilir. Kayıtlı URI düzeni, Android'in URL'yi başlatma parametresi olarak çağırmasıyla OnActivityResult sonuçlanır ve burada yöntem tarafından SetAuthenticationContinuationEventArgs işlenir.

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

Evrensel Windows Platformu 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çabileceğiniz veya hesap oluşturabileceğiniz bir sayfaya gidilmelidir. Oturum açma işlemini tamamladıktan sonra uygulamanın oturum kapatma sayfasına döndürülmelisiniz. Aşağıdaki ekran görüntüsünde Android ve iOS üzerinde çalışan kullanıcı oturum açma ekranı gösterilmektedir: