Share via


Xamarin iOS'un MSAL.NET ile kullanılmasıyla ilgili dikkat edilmesi gerekenler

Xamarin iOS üzerinde .NET için Microsoft Kimlik Doğrulama Kitaplığı'nı (MSAL.NET) kullandığınızda şunları yapmalısınız:

  • içinde işlevini AppDelegategeçersiz kılma ve uygulamaOpenUrl.
  • Anahtarlık gruplarını etkinleştirin.
  • Belirteç önbelleği paylaşımını etkinleştirin.
  • Anahtarlık erişimini etkinleştirin.
  • iOS 12 ve iOS 13 ve kimlik doğrulamasıyla ilgili bilinen sorunları anlayın.

OpenUrl Uygulama

OpenUrl Türetilmiş sınıfın FormsApplicationDelegate yöntemini geçersiz kılın ve öğesini çağırınAuthenticationContinuationHelper.SetAuthenticationContinuationEventArgs. Bir örnek aşağıda verilmiştir:

public override bool OpenUrl(UIApplication app, NSUrl url, NSDictionary options)
{
    AuthenticationContinuationHelper.SetAuthenticationContinuationEventArgs(url);
    return true;
}

Ayrıca aşağıdaki görevleri gerçekleştirin:

  • Yeniden yönlendirme URI'sini tanımlayın.
  • Uygulamanızın başka bir uygulamayı çağırması için izinler iste.
  • Yeniden yönlendirme URI'sine yönelik belirli bir forma sahip olun.
  • Azure portalında yeniden yönlendirme URI'sini kaydedin.

Anahtarlık erişimini etkinleştirme

Anahtarlık erişimini etkinleştirmek için uygulamanızın bir anahtarlık erişim grubu olduğundan emin olun. Uygulamanızı oluştururken API'yi kullanarak WithIosKeychainSecurityGroup() anahtarlık erişim grubunu ayarlayabilirsiniz.

Önbellekten ve çoklu oturum açmadan (SSO) yararlanmak için anahtarlık erişim grubunu tüm uygulamalarınızda aynı değere ayarlayın.

Bu kurulum örneği MSAL 4.x kullanır:

var builder = PublicClientApplicationBuilder
     .Create(ClientId)
     .WithIosKeychainSecurityGroup("com.microsoft.adalcache")
     .Build();

Ayrıca dosyada Entitlements.plist anahtarlık erişimini etkinleştirin. Aşağıdaki erişim grubunu veya kendi erişim grubunuzu kullanın.

<dict>
  <key>keychain-access-groups</key>
  <array>
    <string>$(AppIdentifierPrefix)com.microsoft.adalcache</string>
  </array>
</dict>

API'yi WithIosKeychainSecurityGroup() kullandığınızda MSAL, güvenlik grubunuzu otomatik olarak uygulamanın ekip kimliğinin (AppIdentifierPrefix) sonuna ekler. MSAL, uygulamanızı Xcode'da oluşturduğunuzda aynı işlemi yapacağından güvenlik grubunuzu ekler. Bu nedenle dosyadaki Entitlements.plist yetkilendirmelerin anahtarlık erişim grubundan önce eklenmesi $(AppIdentifierPrefix) gerekir.

Daha fazla bilgi için iOS yetkilendirmeleri belgelerine bakın.

Anahtar Zinciri erişimi sorunlarını giderme

"Uygulama, uygulama yayımcısı için iOS anahtar zincirine erişemiyor (TeamId null)" gibi bir hata iletisi alırsanız, bu MSAL'nin Anahtar Zincirine erişemediği anlamına gelir. Bu bir yapılandırma sorunudur. Sorun gidermek için KeyChain'e kendi başınıza erişmeyi deneyin, örneğin:

var queryRecord = new SecRecord(SecKind.GenericPassword)
{
    Service = "",
    Account = "SomeTeamId",
    Accessible = SecAccessible.Always
};

SecRecord match = SecKeyChain.QueryAsRecord(queryRecord, out SecStatusCode resultCode);

if (resultCode == SecStatusCode.ItemNotFound)
{
    SecKeyChain.Add(queryRecord);
    match = SecKeyChain.QueryAsRecord(queryRecord, out resultCode);
}

// Make sure that  resultCode == SecStatusCode.Success

iOS uygulamaları arasında belirteç önbelleği paylaşımını etkinleştirme

MSAL 2.x'den başlayarak, belirteç önbelleğini birden çok uygulamada kalıcı hale getirmek için bir anahtarlık erişim grubu belirtebilirsiniz. Bu ayar, belirteç önbelleğini aynı anahtarlık erişim grubuna sahip çeşitli uygulamalar arasında paylaşmanızı sağlar. Belirteç önbelleğini ADAL.NET uygulamalar, MSAL.NET Xamarin.iOS uygulamaları ve ADAL.objc veya MSAL.objc içinde geliştirilen yerel iOS uygulamaları arasında paylaşabilirsiniz.

Belirteç önbelleğini paylaşarak, aynı anahtarlık erişim grubunu kullanan tüm uygulamalar arasında çoklu oturum açmaya (SSO) izin verirsiniz.

Bu önbellek paylaşımını WithIosKeychainSecurityGroup() etkinleştirmek için yöntemini kullanarak anahtarlık erişim grubunu aynı önbelleği paylaşan tüm uygulamalarda aynı değere ayarlayın. Bu makaledeki ilk kod örneğinde yönteminin nasıl kullanılacağı gösterilmektedir.

Bu makalenin önceki bölümlerinde, API'yi her kullandığınızda MSAL'nin WithIosKeychainSecurityGroup() eklendiğini $(AppIdentifierPrefix) öğrendiniz. Ekip kimliği AppIdentifierPrefix yalnızca aynı yayımcı tarafından yapılan uygulamaların anahtarlık erişimini paylaşabilmesini sağladığından MSAL bu öğeyi ekler.

Not

KeychainSecurityGroup özelliği kullanım dışı bırakıldı. iOSKeychainSecurityGroup Bunun yerine özelliğini kullanın. TeamId kullanırken iOSKeychainSecurityGroupön ek gerekli değildir.

Microsoft Authenticator kullanma

Uygulamanız, etkinleştirmek için aracı olarak Microsoft Authenticator'ı kullanabilir:

  • SSO: SSO'yı etkinleştirdiğinizde, kullanıcılarınızın her uygulamada oturum açması gerekmez.
  • Cihaz kimliği: Cihaz sertifikasına erişerek kimlik doğrulaması yapmak için cihaz kimliğini kullanın. Bu sertifika, çalışma alanına katıldığında cihazda oluşturulur. Kiracı yöneticileri cihazlarla ilgili Koşullu Erişimi etkinleştirirse uygulamanız hazır olur.
  • Uygulama tanımlama doğrulaması: Bir uygulama aracıyı çağırdığında yeniden yönlendirme URL'sini geçirir. Aracı yeniden yönlendirme URL'sini doğrular.

Aracıyı etkinleştirme hakkında ayrıntılı bilgi için bkz. Xamarin iOS ve Android uygulamalarında Microsoft Authenticator veya Microsoft Intune Şirket Portalı kullanma.

iOS 12 ve kimlik doğrulamasıyla ilgili bilinen sorunlar

Microsoft, iOS 12 ile bazı kimlik doğrulama türleri arasındaki uyumsuzluk hakkında bir güvenlik önerisi yayımladı. Uyumsuzluk sosyal, WSFed ve OIDC oturum açmalarını bozar. Güvenlik önerisi, ASP.NET güvenlik kısıtlamalarını iOS 12 ile uyumlu hale getirmek için uygulamalarınızdan nasıl kaldırabileceğinizi anlamanıza yardımcı olur.

Xamarin iOS'ta MSAL.NET uygulama geliştirirken, iOS 12'den web sitelerinde oturum açmaya çalıştığınızda sonsuz bir döngü görebilirsiniz. Bu davranış GitHub'da bu ADAL sorununa benzer: iOS 12 #1329'dan web sitesinde oturum açmaya çalışırken sonsuz döngü.

iOS 12 Safari ile ASP.NET Core OIDC kimlik doğrulamasında da bir kesme görebilirsiniz. Daha fazla bilgi için bu WebKit sorununa bakın.

iOS 13 ve kimlik doğrulamasıyla ilgili bilinen sorunlar

Uygulamanız Koşullu Erişim veya sertifika kimlik doğrulaması desteği gerektiriyorsa, uygulamanızın Microsoft Authenticator aracı uygulamasıyla iletişim kurmasını etkinleştirin. MSAL daha sonra uygulamanızla Microsoft Authenticator arasındaki istekleri ve yanıtları işlemekle sorumludur.

iOS 13'te Apple, özel URL düzenleri aracılığıyla bir dış uygulamadan yanıt alırken uygulamanın kaynak uygulamayı okuma yeteneğini kaldırarak hataya neden olan bir API değişikliği yaptı.

Apple'ın UIApplicationOpenURLOptionsSourceApplicationKey durumları için belgeleri:

İstek ekibinize ait başka bir uygulamadan geliyorsa, UIKit bu anahtarın değerini bu uygulamanın kimliğine ayarlar. Kaynak uygulamanın ekip tanımlayıcısı geçerli uygulamanın ekip tanımlayıcısından farklıysa anahtarın değeri sıfır olur.

MSAL ile Microsoft Authenticator uygulaması arasındaki iletişimi doğrulamaya bağlı UIApplication.SharedApplication.OpenUrl olduğundan MSAL için bu değişiklik kesiliyor.

Ayrıca, iOS 13'te geliştiricinin kullanırken ASWebAuthenticationSessionbir sunu denetleyicisi sağlaması gerekir.

Xcode 11 ile derleme yapıyorsanız ve iOS aracısı veya ASWebAuthenticationSessionkullanıyorsanız uygulamanız etkilenir.

Bu gibi durumlarda, başarılı kimlik doğrulamasını etkinleştirmek için MSAL.NET 4.4.0+ kullanın.

Ek gereksinimler

  • En son MSAL kitaplıklarını kullanırken cihazda Microsoft Authenticator 6.3.19+ sürümünün yüklü olduğundan emin olun.

  • MSAL.NET 4.4.0+ güncelleştirmesi yaparken Info.plist dosyasındaki öğesini LSApplicationQueriesSchemes güncelleştirin ve ekleyinmsauthv3:

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

    iOS 13'i destekleyen cihazda en son Microsoft Authenticator uygulamasının varlığını algılamak için Info.plist'e ekleme msauthv3 yapılması gerekir.

Sorun bildir

sorularınız varsa veya MSAL.NET'de bulduğunuz bir sorunu bildirmek istiyorsanız GitHub'daki depoda microsoft-authentication-library-for-dotnet bir sorun açın.

Sonraki adımlar

Xamarin iOS özellikleri hakkında bilgi için aşağıdaki örneğin README.md dosyasının iOS'a özgü önemli noktalar paragrafını inceleyin:

Örnek Platform Açıklama
https://github.com/Azure-Samples/active-directory-xamarin-native-v2 Xamarin iOS, Android, Evrensel Windows Platformu (UWP) Microsoft kimlik platformu iş veya okul ve Microsoft kişisel hesaplarının kimliğini doğrulamak ve sonuçta elde edilen belirteçle Microsoft Graph'e erişmek için MSAL.NET nasıl kullanılacağını gösteren bir Xamarin Forms uygulaması.