Udostępnij za pośrednictwem


Zagadnienia dotyczące korzystania z platformy Xamarin dla systemu iOS z systemem MSAL.NET

W przypadku korzystania z biblioteki Microsoft Authentication Library dla platformy .NET (MSAL.NET) w systemie IOS platformy Xamarin należy wykonać następujące działania:

  • Zastąpij i zaimplementuj OpenUrl funkcję w pliku AppDelegate.
  • Włącz grupy pęku kluczy.
  • Włącz udostępnianie pamięci podręcznej tokenów.
  • Włącz dostęp pęku kluczy.
  • Omówienie znanych problemów z systemami iOS 12 i iOS 13 oraz uwierzytelnianiem.

Uwaga

MSAL.NET w wersji 4.61.0 lub nowszej nie zapewniają obsługi platforma uniwersalna systemu Windows (UWP), Xamarin Android i Xamarin iOS. Zalecamy migrację aplikacji platformy Xamarin do nowoczesnych struktur, takich jak MAUI. Przeczytaj więcej o wycofaniu w temacie Ogłaszanie nadchodzącego wycofania MSAL.NET dla platform Xamarin i platformy UWP.

Implementowanie biblioteki OpenUrl

Zastąp metodę OpenUrl klasy pochodnej FormsApplicationDelegate i wywołaj metodę AuthenticationContinuationHelper.SetAuthenticationContinuationEventArgs. Oto przykład:

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

Ponadto wykonaj następujące zadania:

  • Zdefiniuj schemat identyfikatora URI przekierowania.
  • Wymagaj uprawnień do wywoływania innej aplikacji przez aplikację.
  • Ma określony formularz dla identyfikatora URI przekierowania.
  • Zarejestruj identyfikator URI przekierowania w witrynie Azure Portal.

Włączanie dostępu łańcucha kluczy

Aby włączyć dostęp łańcucha kluczy, upewnij się, że aplikacja ma grupę dostępu łańcucha kluczy. Grupę dostępu łańcucha kluczy można ustawić podczas tworzenia aplikacji przy użyciu interfejsu WithIosKeychainSecurityGroup() API.

Aby skorzystać z pamięci podręcznej i logowania jednokrotnego, ustaw grupę dostępu łańcucha kluczy na tę samą wartość we wszystkich aplikacjach.

W tym przykładzie konfiguracji jest używana biblioteka MSAL 4.x:

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

Włącz również dostęp pęku Entitlements.plist kluczy w pliku. Użyj następującej grupy dostępu lub własnej grupy dostępu.

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

W przypadku korzystania z interfejsu WithIosKeychainSecurityGroup() API biblioteka MSAL automatycznie dołącza grupę zabezpieczeń na końcu identyfikatora zespołu aplikacji (AppIdentifierPrefix). Biblioteka MSAL dodaje grupę zabezpieczeń, ponieważ podczas kompilowania aplikacji w środowisku Xcode będzie ona taka sama. Dlatego uprawnienia w Entitlements.plist pliku muszą być uwzględniane $(AppIdentifierPrefix) przed grupą dostępu łańcucha kluczy.

Aby uzyskać więcej informacji, zobacz dokumentację uprawnień systemu iOS.

Rozwiązywanie problemów z dostępem łańcucha kluczy

Jeśli zostanie wyświetlony komunikat o błędzie podobny do "Aplikacja nie może uzyskać dostępu do łańcucha kluczy systemu iOS dla wydawcy aplikacji (identyfikator TeamId ma wartość null)," oznacza to, że biblioteka MSAL nie może uzyskać dostępu do łańcucha kluczy. Jest to problem z konfiguracją. Aby rozwiązać problemy, spróbuj uzyskać dostęp do pęku kluczy na własną rękę, na przykład:

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

Włączanie udostępniania pamięci podręcznej tokenów w aplikacjach systemu iOS

Począwszy od biblioteki MSAL 2.x, można określić grupę dostępu łańcucha kluczy w celu utrwalania pamięci podręcznej tokenów w wielu aplikacjach. To ustawienie umożliwia udostępnianie pamięci podręcznej tokenów między kilkoma aplikacjami, które mają tę samą grupę dostępu łańcucha kluczy. Pamięć podręczną tokenów można udostępniać między aplikacjami ADAL.NET, MSAL.NET aplikacjami platformy Xamarin.iOS i natywnymi aplikacjami systemu iOS utworzonymi w bibliotece ADAL.objc lub MSAL.objc.

Udostępnianie pamięci podręcznej tokenów umożliwia logowanie jednokrotne (SSO) we wszystkich aplikacjach korzystających z tej samej grupy dostępu łańcucha kluczy.

Aby włączyć udostępnianie pamięci podręcznej, użyj WithIosKeychainSecurityGroup() metody , aby ustawić grupę dostępu łańcucha kluczy na tę samą wartość we wszystkich aplikacjach, które współdzielą tę samą pamięć podręczną. W pierwszym przykładzie kodu w tym artykule pokazano, jak używać metody .

Wcześniej w tym artykule pokazano, że biblioteka MSAL dodaje $(AppIdentifierPrefix) zawsze, gdy używasz interfejsu WithIosKeychainSecurityGroup() API. Biblioteka MSAL dodaje ten element, ponieważ identyfikator AppIdentifierPrefix zespołu gwarantuje, że tylko aplikacje utworzone przez tego samego wydawcę mogą współużytkować dostęp łańcucha kluczy.

Uwaga

Właściwość KeychainSecurityGroup jest przestarzała. iOSKeychainSecurityGroup Zamiast tego użyj właściwości . Prefiks nie jest wymagany w przypadku używania TeamId polecenia iOSKeychainSecurityGroup.

Korzystanie z aplikacji Microsoft Authenticator

Aplikacja może używać aplikacji Microsoft Authenticator jako brokera w celu włączenia:

  • Logowanie jednokrotne: po włączeniu logowania jednokrotnego użytkownicy nie muszą logować się do każdej aplikacji.
  • Identyfikacja urządzenia: użyj identyfikacji urządzenia do uwierzytelniania, korzystając z certyfikatu urządzenia. Ten certyfikat jest tworzony na urządzeniu po dołączeniu do miejsca pracy. Aplikacja będzie gotowa, jeśli administratorzy dzierżawy włączą dostęp warunkowy powiązany z urządzeniami.
  • Weryfikacja identyfikacji aplikacji: gdy aplikacja wywołuje brokera, przekazuje adres URL przekierowania. Broker weryfikuje adres URL przekierowania.

Aby uzyskać szczegółowe informacje na temat włączania brokera, zobacz Use Microsoft Authenticator or Microsoft Intune — Portal firmy on Xamarin iOS and Android applications (Korzystanie z programu Microsoft Authenticator lub Microsoft Intune — Portal firmy w aplikacjach platformy Xamarin dla systemów iOS i Android).

Znane problemy z systemem iOS 12 i uwierzytelnianiem

Firma Microsoft wydała biuletyn zabezpieczeń dotyczący niezgodności między systemem iOS 12 a niektórymi typami uwierzytelniania. Niezgodność przerywa logowania społecznościowe, WSFed i OIDC. Porady dotyczące zabezpieczeń pomagają zrozumieć, jak usunąć ASP.NET ograniczenia zabezpieczeń z aplikacji, aby były one zgodne z systemem iOS 12.

Podczas tworzenia aplikacji MSAL.NET w systemie IOS platformy Xamarin może być widoczna nieskończona pętla podczas próby zalogowania się do witryn internetowych z systemu iOS 12. Takie zachowanie jest podobne do tego problemu biblioteki ADAL w usłudze GitHub: pętla Nieskończona podczas próby zalogowania się do witryny internetowej z systemu iOS 12 #1329.

Możesz również zobaczyć przerwę w uwierzytelnianiu ASP.NET Core OIDC w systemie iOS 12 Safari. Aby uzyskać więcej informacji, zobacz ten problem z zestawem WebKit.

Znane problemy z systemem iOS 13 i uwierzytelnianiem

Jeśli aplikacja wymaga obsługi dostępu warunkowego lub uwierzytelniania certyfikatu, włącz aplikację do komunikowania się z aplikacją brokera Microsoft Authenticator. Biblioteka MSAL jest następnie odpowiedzialna za obsługę żądań i odpowiedzi między aplikacją a aplikacją Microsoft Authenticator.

W systemie iOS 13 firma Apple dokonała przełomowej zmiany interfejsu API, usuwając możliwość odczytywania aplikacji źródłowej podczas odbierania odpowiedzi z aplikacji zewnętrznej za pomocą niestandardowych schematów adresów URL.

Dokumentacja firmy Apple dotycząca stanów UIApplicationOpenURLOptionsSourceApplicationKey :

Jeśli żądanie pochodzi z innej aplikacji należącej do zespołu, zestaw UIKit ustawia wartość tego klucza na identyfikator tej aplikacji. Jeśli identyfikator zespołu aplikacji źródłowej różni się od identyfikatora zespołu bieżącej aplikacji, wartość klucza jest zerowa.

Ta zmiana jest niezgodna dla biblioteki MSAL, ponieważ polegała na UIApplication.SharedApplication.OpenUrl weryfikowaniu komunikacji między biblioteką MSAL a aplikacją Microsoft Authenticator.

Ponadto w systemie iOS 13 deweloper musi udostępnić kontroler prezentacji w przypadku korzystania z programu ASWebAuthenticationSession.

Twoja aplikacja ma wpływ na kompilowanie przy użyciu środowiska Xcode 11 i korzystasz z brokera systemu iOS lub ASWebAuthenticationSession.

W takich przypadkach użyj MSAL.NET 4.4.0 lub nowszej , aby włączyć pomyślne uwierzytelnianie.

Wymagania dodatkowe

  • W przypadku korzystania z najnowszych bibliotek BIBLIOTEK MSAL upewnij się, że na urządzeniu jest zainstalowana wersja Microsoft Authenticator w wersji 6.3.19 lub nowszej .

  • Podczas aktualizowania do wersji MSAL.NET 4.4.0 lub nowszej zaktualizuj plik LSApplicationQueriesSchemes w pliku Info.plist i dodaj polecenie msauthv3:

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

    Dodanie msauthv3 do pliku Info.plist jest niezbędne do wykrywania obecności najnowszej aplikacji Microsoft Authenticator na urządzeniu obsługującym system iOS 13.

Zgłoś problem

Jeśli masz pytania lub chcesz zgłosić problem znaleziony w MSAL.NET, otwórz problem w repozytorium w microsoft-authentication-library-for-dotnet witrynie GitHub.

Następne kroki

Aby uzyskać informacje o właściwościach platformy Xamarin dla systemu iOS, zobacz akapit zagadnień specyficznych dla systemu iOS w następującym pliku README.md przykładu:

Przykład Platforma opis
https://github.com/Azure-Samples/active-directory-xamarin-native-v2 Xamarin iOS, Android, platforma uniwersalna systemu Windows (UWP) Aplikacja Xamarin Forms pokazująca, jak używać MSAL.NET do uwierzytelniania kont służbowych i osobistych Microsoft przy użyciu Platforma tożsamości Microsoft oraz uzyskiwania dostępu do programu Microsoft Graph przy użyciu wynikowego tokenu.