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 vAppDelegate
. - 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.
Poznámka:
MSAL.NET verze 4.61.0 a vyšší neposkytují podporu pro Univerzální platforma Windows (UPW), Xamarin Android a Xamarin iOS. Doporučujeme migrovat aplikace Xamarinu do moderních architektur, jako je MAUI. Přečtěte si další informace o vyřazení v oznámení nadcházejícího vyřazení MSAL.NET pro Xamarin a UPW.
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řidejtemsauthv3
:<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. |