Uygulamaları iOS ve macOS için MSAL'ye geçirme

Azure Active Directory Kimlik Doğrulama Kitaplığı (ADAL Objective-C), v1.0 uç noktası aracılığıyla Microsoft Entra hesaplarıyla çalışmak için oluşturulmuştur.

iOS ve macOS için Microsoft Authentication Library (MSAL), Microsoft kimlik platformu (eski adıyla Azure AD v2.0 uç noktası) aracılığıyla Microsoft Entra hesapları, kişisel Microsoft hesapları ve Azure AD B2C hesapları gibi tüm Microsoft kimlikleriyle çalışacak şekilde geliştirilmiştir.

Microsoft kimlik platformu Azure AD v1.0 ile bazı önemli farkları vardır. Bu makalede bu farklar vurgulanır ve bir uygulamayı ADAL'dan MSAL'ye geçirmeye yönelik yönergeler sağlanır.

ADAL ve MSAL uygulama yetenek farklılıkları

Kimler oturum açabilir?

  • ADAL yalnızca Microsoft Entra hesapları olarak da bilinen iş ve okul hesaplarını destekler.
  • MSAL, Hotmail.com, Outlook.com ve Live.com gibi kişisel Microsoft hesaplarını (MSA hesapları) destekler.
  • MSAL, iş veya okul hesaplarını ve Azure AD B2C hesaplarını destekler.

Standartlar uyumluluğu

  • Microsoft kimlik platformu OAuth 2.0 ve OpenId Connect standartlarına uyar.
  • Microsoft kimlik platformu, izinleri dinamik olarak istemenizi sağlar. Uygulamalar yalnızca gerektiğinde izin isteyebilir ve uygulamanın ihtiyaç duyduğundan daha fazla istekte bulunabilir. Daha fazla bilgi için bkz. izinler ve onay.

ADAL ve MSAL kitaplık farklılıkları

MSAL genel API'Azure AD v1.0 ile Microsoft kimlik platformu arasındaki birkaç önemli farkı yansıtır.

ADAuthenticationContext yerine MSALPublicClientApplication

ADAuthenticationContext , ADAL uygulamasının oluşturduğu ilk nesnedir. ADAL'ın bir somut örneğini temsil eder. Uygulamalar, her Microsoft Entra bulut ve kiracı (yetkili merci) kombinasyonu için ADAuthenticationContext öğesinin yeni bir örneğini oluşturur. Aynı ADAuthenticationContext, birden çok ortak istemci uygulaması için belirteçleri almak üzere kullanılabilir.

MSAL'de ana etkileşim, MSALPublicClientApplication ardından modellenen bir nesne üzerinden yapılır. Tek bir örneğiMSALPublicClientApplication, her yetkili için yeni bir örnek oluşturmaya gerek kalmadan birden çok Microsoft Entra bulutu ve kiracıyla etkileşim kurmak için kullanılabilir. Çoğu uygulama için bir MSALPublicClientApplication örnek yeterlidir.

Kaynaklar yerine kapsamlar

ADAL'da bir uygulamanın Azure AD v1.0 uç noktasından belirteç almak için https://graph.microsoft.com gibi bir kaynak tanımlayıcısı sağlaması gerekiyordu. Bir kaynak, anladığı bir dizi kapsam veya uygulama bildiriminde oAuth2Permissions tanımlayabilir. Bu, istemci uygulamalarının uygulama kaydı sırasında önceden tanımlanmış belirli bir kapsam kümesi için bu kaynaktan belirteç istemesine izin verdi.

MSAL'de, uygulamalar tek bir kaynak tanımlayıcısı yerine istek başına bir kapsam kümesi sağlar. Kapsam, resource/permission biçiminde, bir kaynak tanımlayıcısının ardından gelen bir izin adıdır. Örneğin, https://graph.microsoft.com/user.read

MSAL'de kapsam sağlamanın iki yolu vardır:

  • Uygulamalarınızın ihtiyaç duyduğu tüm izinlerin listesini sağlayın. Örneğin:

    @[@"https://graph.microsoft.com/directory.read", @"https://graph.microsoft.com/directory.write"]

    Bu durumda, uygulama directory.read ve directory.write izinlerini ister. Kullanıcıdan bu uygulama için daha önce onay vermemişse bu izinleri onaylaması istenir. Uygulama, kullanıcının uygulama için zaten onaylamış olduğu ek izinleri de alabilir. Kullanıcıdan yalnızca yeni izinler veya henüz verilmemiş izinler için onay istenir.

  • /.default kapsam.

Bu, her uygulamanın yerleşik kapsamıdır. Uygulama kaydedildiğinde yapılandırılan statik izin listesine başvurur. Bunun davranışı resource'inkine benzerdir. Benzer bir kapsam kümesinin ve kullanıcı deneyiminin korunduğundan emin olmak için geçiş yaparken bu yararlı olabilir.

/.default kapsamını kullanmak için, /.default ifadesini kaynak tanımlayıcısına ekleyin. Örneğin: https://graph.microsoft.com/.default. Kaynağınız bir bölü işaretiyle (/) bitiyorsa, baştaki bölü işareti de dahil olmak üzere /.default ifadesini yine de eklemelisiniz; sonuçta içinde çift bölü işareti (//) bulunan bir kapsam elde edersiniz.

İzinlerde ve kapsamlarda "/.default" kapsamını kullanma hakkında daha fazla bilgi okuyabilirsiniz.

Farklı WebView türlerini ve tarayıcıları destekleme

ADAL yalnızca iOS için UIWebView/WKWebView ve macOS için WebView'u destekler. iOS için MSAL, yetkilendirme kodu isteğinde bulunurken web içeriğini görüntülemeye yönelik daha fazla seçeneği destekler UIWebViewve artık desteklemez; bu da kullanıcı deneyimini ve güvenliğini geliştirebilir.

Varsayılan olarak, iOS'ta MSAL, Apple'ın iOS 12+ cihazlarda kimlik doğrulaması için önerdiği web bileşeni olan ASWebAuthenticationSession'ı kullanır. Uygulamalar ve Safari tarayıcısı arasında tanımlama bilgisi paylaşımı yoluyla çoklu oturum açma (SSO) avantajları sağlar.

Uygulama gereksinimlerine ve istediğiniz son kullanıcı deneyimine bağlı olarak farklı bir web bileşeni kullanmayı seçebilirsiniz. Daha fazla seçenek için desteklenen web görünümü türlerine bakın.

ADAL'dan MSAL'ye geçiş yaparken, WKWebView iOS ve macOS'ta ADAL'a en benzer kullanıcı deneyimini sağlar. Mümkünse iOS'a ASWebAuthenticationSession geçmenizi öneririz. macOS için kullanmanızı öneririz WKWebView.

Hesap yönetimi API'leri farklılıkları

ADAL yöntemlerini acquireToken() veya acquireTokenSilent()çağırdığınızda, kimliği doğrulanan hesabı temsil eden taleplerin ADUserInformation listesini içeren bir nesne alırsınızid_token. Ayrıca, ADUserInformation, upn talebini temel alan bir userId döndürür. İlk etkileşimli belirteç alımından sonra ADAL, geliştiricinin tüm sessiz çağrılarda userId sağlamasını bekler.

ADAL, bilinen kullanıcı kimliklerini almak için bir API sağlamaz. Bu hesapları kaydetmek ve yönetmek için uygulamaya bağlıdır.

MSAL, belirteç almak zorunda kalmadan MSAL tarafından bilinen tüm hesapları listelemek için bir dizi API sağlar.

ADAL gibi MSAL da, id_token kaynağından gelen talep listesini içeren hesap bilgilerini döndürür. MSALResult nesnesinin içindeki MSALAccount nesnesinin bir parçasıdır.

MSAL, hesapları kaldırmak için bir dizi API sağlar ve kaldırılan hesapların uygulama için erişilemez olmasını sağlar. Hesap kaldırıldıktan sonra, sonraki belirteç alma çağrıları kullanıcıdan etkileşimli belirteç alma işlemi gerçekleştirmesini ister. Hesap kaldırma yalnızca onu başlatan istemci uygulaması için geçerlidir ve hesabı cihazda veya sistem tarayıcısından çalışan diğer uygulamalardan kaldırmaz. Bu, kullanıcının tek bir uygulama oturumu kapatıldıktan sonra bile cihazda SSO deneyimi yaşamaya devam etmesini sağlar.

Ayrıca MSAL, daha sonra sessizce belirteç istemek için kullanılabilecek bir hesap tanımlayıcısı da döndürür. Ancak, hesap tanımlayıcısı (MSALAccount nesnesindeki identifier özelliği aracılığıyla erişilebilir) görüntülenemez ve hangi biçimde olduğunu varsaymamalı ya da onu yorumlamaya veya ayrıştırmaya çalışmamalısınız.

Hesap önbelleğini geçirme

ADAL'dan geçiş yapılırken, uygulamalar normalde ADAL'ın userId öğesini saklar; bu öğe, MSAL'ın gerektirdiği identifier öğesine sahip değildir. Bir kerelik geçiş adımı olarak, bir uygulama aşağıdaki API ile ADAL'ın userId değerini kullanarak bir MSAL hesabını sorgulayabilir:

- (nullable MSALAccount *)accountForUsername:(nonnull NSString *)username error:(NSError * _Nullable __autoreleasing * _Nullable)error;

Bu API, hesabı ADAL userId (UPN) ile bulmak için hem MSAL hem de ADAL önbelleğini okur.

Hesap bulunursa, geliştirici sessiz belirteç edinimi için bu hesabı kullanmalıdır. İlk sessiz belirteç alımı hesabı etkili bir şekilde yükseltecek ve geliştirici MSAL sonucunda (identifier) MSAL uyumlu bir hesap tanımlayıcısı alacaktır. Bundan sonra, yalnızca identifier aşağıdaki API kullanılarak hesap aramaları için kullanılmalıdır:

- (nullable MSALAccount *)accountForIdentifier:(nonnull NSString *)identifier error:(NSError * _Nullable __autoreleasing * _Nullable)error;

MSAL'deki tüm işlemler için ADAL'in userId öğesini kullanmayı sürdürmek mümkün olsa da, userId UPN'ye dayandığından, kötü bir kullanıcı deneyimine yol açan birden çok sınırlamaya tabidir. Örneğin, UPN değişirse kullanıcının yeniden oturum açması gerekir. Tüm uygulamaların tüm işlemler için görüntülenemeyen hesabı identifier kullanmasını öneririz.

Önbellek durumu geçişi hakkında daha fazla bilgi edinin.

Belirteç edinme değişiklikleri

MSAL, belirteç edinme çağrılarında bazı değişiklikler getirir:

  • ADAL gibi, acquireTokenSilent her zaman sessiz bir istekle sonuç alır.
  • ADAL'dan farklı olarak, acquireToken web görünümü veya Microsoft Authenticator uygulaması aracılığıyla her zaman kullanıcı tarafından eyleme dönüştürülebilir kullanıcı arabirimiyle sonuçlanabilir. Webview/Microsoft Authenticator içindeki SSO durumuna bağlı olarak, kullanıcıdan kimlik bilgilerini girmesi istenebilir.
  • ADAL'da, acquireTokenAD_PROMPT_AUTO ilk kez sessiz belirteç alımını dener ve yalnızca sessiz istek başarısız olursa kullanıcı arabirimini gösterir. MSAL'de bu mantık, önce acquireTokenSilent çağrılarak ve yalnızca sessiz belirteç alma başarısız olursa acquireToken çağrılarak gerçekleştirilebilir. Bu, geliştiricilerin etkileşimli belirteç alımını başlatmadan önce kullanıcı deneyimini özelleştirmesine olanak tanır.

Hata işleme farklılıkları

MSAL, uygulamanız tarafından işlenebilen hatalar ile kullanıcının müdahalesini gerektiren hatalar arasında daha fazla netlik sağlar. Geliştiricinin işlemesi gereken sınırlı sayıda hata vardır:

  • MSALErrorInteractionRequired: Kullanıcı etkileşimli bir istekte bulunmalıdır. Bunun nedeni süresi dolmuş bir kimlik doğrulama oturumu, Koşullu Erişim ilkesinin değişmesi, yenileme belirtecinin süresinin dolması veya iptal edilmesi, önbellekte geçerli belirteç olmaması vb. gibi çeşitli nedenlerden kaynaklanabilir.
  • MSALErrorServerDeclinedScopes: İstek tam olarak tamamlanmadı ve bazı kapsamlara erişim verilmedi. Bunun nedeni, kullanıcının bir veya daha fazla kapsama onay vermemeye devam etmesi olabilir.

Listedeki diğer tüm hataların MSALError işlenmesi isteğe bağlıdır. Kullanıcı deneyimini geliştirmek için bu hatalardaki bilgileri kullanabilirsiniz.

MSAL hata işleme hakkında daha fazla bilgi için bkz. MSAL kullanarak özel durumları ve hataları işleme.

Broker desteği

0.3.0 sürümünden başlayarak MSAL, Microsoft Authenticator uygulamasını kullanarak aracılı kimlik doğrulaması için destek sağlar. Microsoft Authenticator ayrıca Koşullu Erişim senaryoları için destek sağlar. Koşullu Erişim senaryolarına örnek olarak, kullanıcının cihazı Intune aracılığıyla kaydetmesini veya belirteç almak için Microsoft Entra ID kaydetmesini gerektiren cihaz uyumluluk ilkeleri verilebilir. Ayrıca, uygulamanızın belirteç alabilmesi için uyumluluk kanıtı gerektiren Mobil Uygulama Yönetimi (MAM) Koşullu Erişim ilkeleri.

Uygulamanız için aracıyı etkinleştirmek için:

  1. Uygulama için aracı uyumlu bir yeniden yönlendirme URI biçimi kaydedin. Aracıyla uyumlu yeniden yönlendirme URI'si biçimi msauth.<app.bundle.id>://auth şeklindedir. <app.bundle.id> ifadesini uygulamanızın paket kimliğiyle değiştirin. ADAL'den geçiş yapıyorsanız ve uygulamanız zaten aracı yeteneğine sahipse, yapmanız gereken ek bir şey yoktur. Önceki yeniden yönlendirme URI'niz MSAL ile tamamen uyumludur, bu nedenle 3. adıma atlayabilirsiniz.

  2. Uygulamanızın yeniden yönlendirme URI şemasını info.plist dosyanıza ekleyin. Varsayılan MSAL yeniden yönlendirme URI'sinin biçimi şeklindedir msauth.<app.bundle.id>. Örneğin:

    <key>CFBundleURLSchemes</key>
    <array>
        <string>msauth.<app.bundle.id></string>
    </array>
    
  3. Uygulamanızın Info.plist dosyasında, LSApplicationQueriesSchemes altında aşağıdaki URL şemalarını ekleyin:

    <key>LSApplicationQueriesSchemes</key>
    <array>
         <string>msauthv2</string>
         <string>msauthv3</string>
    </array>
    
  4. Geri çağırmaları işlemek için AppDelegate.m dosyanıza aşağıdakileri ekleyin: Objective-C:

    - (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString *,id> *)options`
    {
        return [MSALPublicClientApplication handleMSALResponse:url sourceApplication:options[UIApplicationOpenURLOptionsSourceApplicationKey]];
    }
    

    Çabuk:

    func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
        return MSALPublicClientApplication.handleMSALResponse(url, sourceApplication: options[UIApplication.OpenURLOptionsKey.sourceApplication] as? String)
    }
    

İşletmeden işletmeye (B2B)

ADAL'da, uygulamanın belirteç istediği her kiracı için ayrı bir ADAuthenticationContext örneği oluşturursunuz. Bu artık MSAL'da bir gereksinim değildir. MSAL'de, acquireToken ve acquireTokenSilent çağrıları MSALPublicClientApplication için farklı bir yetkili belirterek tek bir örneği oluşturabilir ve bunu herhangi bir Microsoft Entra bulut ve kuruluş için kullanabilirsiniz.

Diğer SDK'larla ortak SSO

iOS için MSAL, ADAL Objective-C 2.7.x+ ile birleşik bir önbellek aracılığıyla SSO elde edebilir.

SSO, iOS anahtarlık paylaşımıyla sağlanır ve yalnızca aynı Apple Geliştirici hesabında yayımlanan uygulamalar arasında kullanılabilir.

iOS anahtarlık paylaşımı aracılığıyla SSO, tek sessiz SSO türüdür.

macOS'ta MSAL, iOS ve macOS tabanlı uygulamalar ve ADAL Objective-C tabanlı uygulamalar için diğer MSAL ile SSO elde edebilir.

iOS üzerinde MSAL, diğer iki SSO türünü de destekler:

  • Web tarayıcısı üzerinden SSO. iOS için MSAL, cihazdaki diğer uygulamalarla ve özellikle Safari tarayıcısıyla paylaşılan tanımlama bilgileri aracılığıyla SSO sağlayan ASWebAuthenticationSession özelliğini destekler.
  • Kimlik Doğrulama aracısı aracılığıyla SSO. Bir iOS cihazında Microsoft Authenticator Kimlik Doğrulama aracısı olarak görev yapar. Uyumlu cihaz gerektirme gibi Koşullu Erişim ilkelerini izleyebilir ve kayıtlı cihazlar için SSO sağlar. Sürüm 0.3.0 ile başlayan MSAL SDK'ları varsayılan olarak bir aracıyı destekler.

Intune MAM SDK'sı

Intune MAM SDK'sı, 11.1.2 sürümünden itibaren iOS için MSAL'yi destekler

Aynı uygulamada MSAL ve ADAL

ADAL sürüm 2.7.0 ve üzeri, aynı uygulamada MSAL ile birlikte kullanılamaz. Bunun temel nedeni paylaşılan alt modül ortak kodudur. Objective-C ad alanlarını desteklemediğinden, uygulamanıza hem ADAL hem de MSAL çerçeveleri eklerseniz, aynı sınıfın iki örneği olur. Hangisinin çalışma zamanında seçileceğine dair hiçbir garanti yoktur. Her iki SDK da çakışan sınıfın aynı sürümünü kullanıyorsa uygulamanız çalışmaya devam edebilir. Ancak bu farklı bir sürümse, uygulamanızda teşhis edilmesi zor beklenmedik çökmeler meydana gelebilir.

ADAL ve MSAL'nin aynı üretim uygulamasında çalıştırılması desteklenmez. Ancak, kullanıcılarınızı iOS ve macOS için ADAL Objective-C'den MSAL'ye test edip geçiriyorsanız , ADAL Objective-C 2.6.10'ı kullanmaya devam edebilirsiniz. Aynı uygulamada MSAL ile çalışan tek sürümdür. Bu ADAL sürümü için yeni özellik güncelleştirmesi olmayacağı için yalnızca geçiş ve test amacıyla kullanılmalıdır. Uygulamanız ADAL ve MSAL'nin uzun süreli birlikte varlığına güvenmemelidir.

ADAL ve MSAL'ın aynı uygulamada birlikte kullanılması desteklenmez. Birden çok uygulama arasında ADAL ve MSAL bir arada bulunma özelliği tam olarak desteklenir.

Pratik geçiş adımları

Uygulama kaydının taşınması

MSAL'ye geçmek ve Microsoft Entra hesaplarını etkinleştirmek için mevcut Microsoft Entra uygulamanızı değiştirmeniz gerekmez. Ancak, ADAL tabanlı uygulamanız aracılı kimlik doğrulamasını desteklemiyorsa, MSAL'ye geçebilmek için önce uygulama için yeni bir yeniden yönlendirme URI'sini kaydetmeniz gerekir.

Yeniden yönlendirme URI'sinin şu biçimde olması gerekir: msauth.<app.bundle.id>://auth. <app.bundle.id> ifadesini uygulamanızın paket kimliğiyle değiştirin. Microsoft Entra yönetim merkezi yeniden yönlendirme URI'sini belirtin.

Yalnızca iOS için sertifika tabanlı kimlik doğrulamasını desteklemek için uygulamanıza ve Microsoft Entra yönetim merkezi aşağıdaki biçimde ek bir yeniden yönlendirme URI'sinin kaydedilmesi gerekir: msauth://code/<broker-redirect-uri-in-url-encoded-form>. Örneğin, msauth://code/msauth.com.microsoft.mybundleId%3A%2F%2Fauth

Tüm uygulamaların her iki yeniden yönlendirme URI'sini de kaydetmesini öneririz.

Artımlı onay için destek eklemek istiyorsanız API izinleri sekmesinden uygulamanızın uygulama kaydınızda erişim istemek için yapılandırıldığı API'leri ve izinleri seçin.

ADAL'den geçiş gerçekleştiriyorsanız ve hem Microsoft Entra ID hem de MSA hesaplarını desteklemek istiyorsanız, mevcut uygulama kaydınızın her ikisini de destekleyecek şekilde güncelleştirilmesi gerekir. Mevcut üretim uygulamanızı hem Microsoft Entra ID hem de MSA'yi hemen destekleyecek şekilde güncelleştirmenizi önermiyoruz. Bunun yerine test için hem Microsoft Entra ID hem de MSA'yı destekleyen başka bir istemci kimliği oluşturun ve tüm senaryoların çalıştığını doğruladıktan sonra mevcut uygulamayı güncelleştirin.

Uygulamanıza MSAL ekleme

Tercih ettiğiniz paket yönetim aracını kullanarak uygulamanıza MSAL SDK'sı ekleyebilirsiniz. Burada ayrıntılı yönergelere bakın.

Uygulamanızın Info.plist dosyasını güncelleştirme

Yalnızca iOS için, uygulamanızın yeniden yönlendirme URI şemasını info.plist dosyanıza ekleyin. ADAL aracısıyla uyumlu uygulamalar için bu zaten mevcut olmalı. Varsayılan MSAL yeniden yönlendirme URI düzeni şu biçimde olacaktır: msauth.<app.bundle.id>.

<key>CFBundleURLSchemes</key>
<array>
    <string>msauth.<app.bundle.id></string>
</array>

Aşağıdaki şemaları, uygulamanızın Info.plist dosyasında LSApplicationQueriesSchemes altına ekleyin.

<key>LSApplicationQueriesSchemes</key>
<array>
     <string>msauthv2</string>
     <string>msauthv3</string>
</array>

AppDelegate kodunuzu güncelleştirme

Yalnızca iOS için AppDelegate.m dosyanıza aşağıdakileri ekleyin:

Objective-C:

- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString *,id> *)options`
{
    return [MSALPublicClientApplication handleMSALResponse:url sourceApplication:options[UIApplicationOpenURLOptionsSourceApplicationKey]];
}

Çabuk:

func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
    return MSALPublicClientApplication.handleMSALResponse(url, sourceApplication: options[UIApplication.OpenURLOptionsKey.sourceApplication] as? String)
}

Xcode 11 kullanıyorsanız, bunun yerine MSAL geri çağırma işlevini SceneDelegate dosyasına yerleştirmelisiniz. Eski iOS ile uyumluluk için hem UISceneDelegate hem de UIApplicationDelegate'i destekliyorsanız, MSAL geri çağırmanın her iki dosyaya da yerleştirilmesi gerekir.

Objective-C:

 - (void)scene:(UIScene *)scene openURLContexts:(NSSet<UIOpenURLContext *> *)URLContexts
 {
     UIOpenURLContext *context = URLContexts.anyObject;
     NSURL *url = context.URL;
     NSString *sourceApplication = context.options.sourceApplication;
     
     [MSALPublicClientApplication handleMSALResponse:url sourceApplication:sourceApplication];
 }

Çabuk:

func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) {
        
        guard let urlContext = URLContexts.first else {
            return
        }
        
        let url = urlContext.url
        let sourceApp = urlContext.options.sourceApplication
        
        MSALPublicClientApplication.handleMSALResponse(url, sourceApplication: sourceApp)
    }

Bu, MSAL'nin aracıdan ve web bileşeninden gelen yanıtları işlemesini sağlar. ADAL'da buna gerek yoktu çünkü uygulama temsilcisi yöntemlerini otomatik olarak "swizzle" ediyordu. El ile eklemek daha az hataya açıktır ve uygulamaya daha fazla denetim sağlar.

Belirteç önbelleğe almayı etkinleştirme

Varsayılan olarak MSAL, uygulamanızın belirteçlerini iOS veya macOS anahtar zincirinde önbelleğe alır.

Belirteç önbelleğe almayı etkinleştirmek için:

  1. Uygulamanızın düzgün imzalandığından emin olun
  2. Xcode Project Ayarları >Özellikler sekmesine> gidinAnahtarlık Paylaşımını Etkinleştir
  3. + öğesine tıklayın ve aşağıdaki Anahtar Zinciri Grupları girdisini girin: 3.a iOS için com.microsoft.adalcache girin 3.b macOS için com.microsoft.identity.universalstorage girin

MSALPublicClientApplication oluşturun ve MSALPublicClientApplication'ın acquireToken ve acquireTokeSilent çağrılarını kullanmaya geçin

Aşağıdaki kodu kullanarak oluşturabilirsiniz MSALPublicClientApplication :

Objective-C:

NSError *error = nil;
MSALPublicClientApplicationConfig *configuration = [[MSALPublicClientApplicationConfig alloc] initWithClientId:@"<your-client-id-here>"];
    
MSALPublicClientApplication *application =
[[MSALPublicClientApplication alloc] initWithConfiguration:configuration
                                                     error:&error];

Çabuk:

let config = MSALPublicClientApplicationConfig(clientId: "<your-client-id-here>")
do {
  let application = try MSALPublicClientApplication(configuration: config)
  // continue on with application
            
} catch let error as NSError {
  // handle error here
}

Ardından önbellekte herhangi bir hesap olup olmadığını görmek için hesap yönetimi API'sini çağırın:

Objective-C:

NSString *accountIdentifier = nil /*previously saved MSAL account identifier */;
NSError *error = nil;
MSALAccount *account = [application accountForIdentifier:accountIdentifier error:&error];

Çabuk:

// definitions that need to be initialized
let application: MSALPublicClientApplication!
let accountIdentifier: String! /*previously saved MSAL account identifier */

do {
  let account = try application.account(forIdentifier: accountIdentifier)
  // continue with account usage
} catch let error as NSError {
  // handle error here
}

veya tüm hesapları görüntüleyin:

Objective-C:

NSError *error = nil;
NSArray<MSALAccount *> *accounts = [application allAccounts:&error];

Çabuk:

let application: MSALPublicClientApplication!
do {
  let accounts = try application.allAccounts()
  // continue with account usage
} catch let error as NSError {
  // handle error here
}

Bir hesap bulunursa MSAL acquireTokenSilent API'sini çağırın:

Objective-C:

MSALSilentTokenParameters *silentParameters = [[MSALSilentTokenParameters alloc] initWithScopes:@[@"<your-resource-here>/.default"] account:account];
    
[application acquireTokenSilentWithParameters:silentParameters
                              completionBlock:^(MSALResult *result, NSError *error)
{
    if (result)
    {
        NSString *accessToken = result.accessToken;
        // Use your token
    }
    else
    {
        // Check the error
        if ([error.domain isEqual:MSALErrorDomain] && error.code == MSALErrorInteractionRequired)
        {
            // Interactive auth will be required
        }
            
        // Other errors may require trying again later, or reporting authentication problems to the user
    }
}];

Çabuk:

let application: MSALPublicClientApplication!
let account: MSALAccount!
        
let silentParameters = MSALSilentTokenParameters(scopes: ["<your-resource-here>/.default"], 
                                                 account: account)
application.acquireTokenSilent(with: silentParameters) {
  (result: MSALResult?, error: Error?) in
  if let accessToken = result?.accessToken {
     // use accessToken
  }
  else {
    // Check the error
    guard let error = error else {
      assert(true, "callback should contain a valid result or error")
      return
    }
    
    let nsError = error as NSError
    if (nsError.domain == MSALErrorDomain
        && nsError.code == MSALError.interactionRequired.rawValue) {
      // Interactive auth will be required
    }
                
    // Other errors may require trying again later, or reporting authentication problems to the user
  }
}

Sonraki Adımlar

Kimlik doğrulama akışları ve uygulama senaryoları hakkında daha fazla bilgi edinin