Důležité informace o používání Xamarinu s iOSem s MSAL.NET

Při použití knihovny Microsoft Authentication Library pro .NET (MSAL.NET) v Xamarinu iOS byste měli:

  • Přepsat a implementovat OpenUrl funkci v AppDelegate.
  • Povolte skupiny řetězce klíčů.
  • Povolte sdílení mezipaměti tokenů.
  • Povolte přístup ke klíčence.
  • Seznamte se se známými problémy s iOSem 12 a iOSem 13 a ověřováním.

Implementace OpenUrl

OpenUrl Přepsat metodu odvozené FormsApplicationDelegate třídy a volání AuthenticationContinuationHelper.SetAuthenticationContinuationEventArgs. Tady je příklad:

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

Proveďte také následující úlohy:

  • Definujte schéma identifikátoru URI přesměrování.
  • Vyžadovat oprávnění pro volání jiné aplikace.
  • Pro identifikátor URI přesměrování zadejte konkrétní formulář.
  • Zaregistrujte identifikátor URI přesměrování na webu Azure Portal.

Povolení přístupu ke klíčence

Pokud chcete povolit přístup ke řetězce klíčů, ujistěte se, že vaše aplikace má přístupovou skupinu řetězce klíčů. Přístupovou skupinu řetězce klíčů můžete nastavit při vytváření aplikace pomocí WithIosKeychainSecurityGroup() rozhraní API.

Pokud chcete využít výhod mezipaměti a jednotného přihlašování (SSO), nastavte přístupovou skupinu řetězce klíčů na stejnou hodnotu ve všech vašich aplikacích.

Tento příklad instalace používá MSAL 4.x:

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

Povolte také přístup ke řetězce klíčů v Entitlements.plist souboru. Použijte buď následující přístupovou skupinu, nebo vlastní přístupovou skupinu.

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

Když použijete WithIosKeychainSecurityGroup() rozhraní API, MSAL automaticky připojí vaši skupinu zabezpečení na konec ID týmu aplikace (AppIdentifierPrefix). MSAL přidá vaši skupinu zabezpečení, protože když vytvoříte aplikaci v Xcode, udělá to stejné. Proto musí oprávnění v Entitlements.plist souboru obsahovat $(AppIdentifierPrefix) před přístupovou skupinu řetězce klíčů.

Další informace najdete v dokumentaci k nárokům na iOS.

Řešení potíží s přístupem ke klíčence

Pokud se zobrazí chybová zpráva typu "Aplikace nemůže získat přístup ke klíčence pro iOS pro vydavatele aplikace (TeamId je null)", znamená to, že knihovna MSAL nemá přístup k klíčence. Jedná se o problém s konfigurací. Pokud chcete problém vyřešit, zkuste získat přístup k řetězci klíčů sami, například:

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

Povolení sdílení mezipaměti tokenů mezi aplikacemi pro iOS

Počínaje verzí MSAL 2.x můžete zadat přístupovou skupinu řetězce klíčů, která bude uchovávat mezipaměť tokenů napříč více aplikacemi. Toto nastavení umožňuje sdílet mezipaměť tokenů mezi několika aplikacemi, které mají stejnou přístupovou skupinu řetězce klíčů. Mezipaměť tokenů můžete sdílet mezi aplikacemi ADAL.NET , MSAL.NET aplikacemi Xamarin.iOS a nativními aplikacemi pro iOS vyvinutými v ADAL.objc nebo MSAL.objc.

Sdílením mezipaměti tokenů povolíte jednotné přihlašování (SSO) mezi všemi aplikacemi, které používají stejnou přístupovou skupinu řetězce klíčů.

Pokud chcete povolit sdílení mezipaměti, použijte metodu WithIosKeychainSecurityGroup() k nastavení přístupové skupiny řetězce klíčů na stejnou hodnotu ve všech aplikacích, které sdílejí stejnou mezipaměť. První příklad kódu v tomto článku ukazuje, jak použít metodu.

Dříve v tomto článku jste se dozvěděli, že MSAL přidá $(AppIdentifierPrefix) pokaždé, když použijete WithIosKeychainSecurityGroup() rozhraní API. MSAL přidá tento prvek, protože ID AppIdentifierPrefix týmu zajišťuje, že přístup ke klíčence může sdílet pouze aplikace vytvořené stejným vydavatelem.

Poznámka:

Vlastnost KeychainSecurityGroup je zastaralá. iOSKeychainSecurityGroup Místo toho použijte vlastnost. Předpona TeamId není vyžadována při použití iOSKeychainSecurityGroup.

Použití aplikace Microsoft Authenticator

Aplikace může jako zprostředkovatel použít Microsoft Authenticator k povolení:

  • Jednotné přihlašování: Když povolíte jednotné přihlašování, uživatelé se nemusí ke každé aplikaci přihlašovat.
  • Identifikace zařízení: K ověření použijte identifikaci zařízení pomocí přístupu k certifikátu zařízení. Tento certifikát se vytvoří na zařízení, když je připojený k pracovišti. Vaše aplikace bude připravená, pokud správci tenanta povolí podmíněný přístup související se zařízeními.
  • Ověření identifikace aplikace: Když aplikace zavolá zprostředkovatele, předá adresu URL přesměrování. Zprostředkovatel ověří adresu URL přesměrování.

Podrobnosti o tom, jak povolit zprostředkovatele, najdete v tématu Použití aplikace Microsoft Authenticator nebo Microsoft Portál společnosti Intune v aplikacích pro Xamarin iOS a Android.

Známé problémy s iOSem 12 a ověřováním

Společnost Microsoft vydala poradce pro zabezpečení kvůli nekompatibilitě mezi iOSem 12 a některými typy ověřování. Nekompatibilitu přeruší sociální přihlášení, WSFed a OIDC. Poradce pro zabezpečení vám pomůže pochopit, jak z aplikací odebrat ASP.NET omezení zabezpečení, aby byly kompatibilní s iOSem 12.

Při vývoji MSAL.NET aplikací v Xamarinu iOS se může při pokusu o přihlášení k webům z iOS 12 zobrazit nekonečná smyčka. Takové chování se podobá tomuto problému SDAL na GitHubu: Nekonečná smyčka při pokusu o přihlášení k webu z iOS 12 #1329.

V ASP.NET ověřování Core OIDC v iOSu 12 Safari se také může zobrazit přerušení. Další informace najdete v tomto problému s WebKitem.

Známé problémy s iOSem 13 a ověřováním

Pokud vaše aplikace vyžaduje podporu podmíněného přístupu nebo ověřování certifikátů, povolte aplikaci komunikovat s zprostředkační aplikací Microsoft Authenticator. MSAL pak zodpovídá za zpracování požadavků a odpovědí mezi vaší aplikací a aplikací Microsoft Authenticator.

V iOSu 13 společnost Apple provedla zásadní změnu rozhraní API odebráním schopnosti aplikace číst zdrojovou aplikaci při přijímání odpovědi z externí aplikace prostřednictvím vlastních schémat adres URL.

Dokumentace Společnosti Apple pro stavy UIApplicationOpenURLOptionsSourceApplicationKey :

Pokud žádost pochází z jiné aplikace, která patří vašemu týmu, uiKit nastaví hodnotu tohoto klíče na ID této aplikace. Pokud se identifikátor týmu původní aplikace liší od identifikátoru týmu aktuální aplikace, hodnota klíče je nil.

Tato změna je pro knihovnu MSAL zásadní, protože se spoléhala na UIApplication.SharedApplication.OpenUrl ověření komunikace mezi knihovnou MSAL a aplikací Microsoft Authenticator.

Kromě toho v iOSu 13 musí vývojář poskytnout prezentační ovladač při použití ASWebAuthenticationSession.

Pokud vytváříte Xcode 11 a používáte zprostředkovatele iOS nebo ASWebAuthenticationSession.

V takových případech použijte k povolení úspěšného ověřování MSAL.NET 4.4.0 nebo novější .

Další požadavky

  • Pokud používáte nejnovější knihovny MSAL, ujistěte se, že je na zařízení nainstalovaná aplikace Microsoft Authenticator verze 6.3.19 nebo novější .

  • Při aktualizaci na MSAL.NET 4.4.0+ aktualizujte soubor LSApplicationQueriesSchemes v souboru Info.plist a přidejte msauthv3:

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

    Přidání msauthv3 do souboru Info.plist je nezbytné ke zjištění přítomnosti nejnovější aplikace Microsoft Authenticator na zařízení, které podporuje iOS 13.

Oznámit problém

Pokud máte dotazy nebo chcete nahlásit problém, který jste našli v MSAL.NET, otevřete problém v microsoft-authentication-library-for-dotnet úložišti na GitHubu.

Další kroky

Informace o vlastnostech Xamarinu iOS najdete v odstavci specifické pro iOS v následujícím ukázkovém souboru README.md:

Vzorek Platforma Popis
https://github.com/Azure-Samples/active-directory-xamarin-native-v2 Xamarin iOS, Android, Univerzální platforma Windows (UPW) Aplikace Xamarin Forms ukazuje, jak používat MSAL.NET k ověřování pracovních nebo školních a osobních účtů Microsoft pomocí platformy Microsoft Identity Platform a přístupu k Microsoft Graphu s výsledným tokenem.