Share via


Overwegingen voor het gebruik van Xamarin iOS met MSAL.NET

Wanneer u de Microsoft Authentication Library voor .NET (MSAL.NET) op Xamarin iOS gebruikt, moet u het volgende doen:

  • Overschrijven en implementeren van de OpenUrl functie in AppDelegate.
  • Schakel sleutelhangergroepen in.
  • Tokencache delen inschakelen.
  • Toegang tot de sleutelhanger inschakelen.
  • Bekende problemen met iOS 12 en iOS 13 en verificatie begrijpen.

Notitie

MSAL.NET versies 4.61.0 en hoger bieden geen ondersteuning voor Universeel Windows-platform (UWP), Xamarin Android en Xamarin iOS. U wordt aangeraden uw Xamarin-toepassingen te migreren naar moderne frameworks zoals MAUI. Lees meer over de afschaffing in Aankondiging van de geplande afschaffing van MSAL.NET voor Xamarin en UWP.

OpenUrl implementeren

Overschrijf de OpenUrl methode van de FormsApplicationDelegate afgeleide klasse en aanroep AuthenticationContinuationHelper.SetAuthenticationContinuationEventArgs. Hier volgt een voorbeeld:

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

Voer ook de volgende taken uit:

  • Definieer een omleidings-URI-schema.
  • Machtigingen vereisen voor uw app om een andere app aan te roepen.
  • Een specifiek formulier hebben voor de omleidings-URI.
  • Registreer een omleidings-URI in Azure Portal.

Toegang tot sleutelketen inschakelen

Als u toegang tot de sleutelhanger wilt inschakelen, moet u ervoor zorgen dat uw toepassing een toegangsgroep voor sleutelhangers heeft. U kunt de toegangsgroep voor de sleutelhanger instellen wanneer u uw toepassing maakt met behulp van de WithIosKeychainSecurityGroup() API.

Als u wilt profiteren van de cache en eenmalige aanmelding (SSO), stelt u de sleutelhangertoegangsgroep in op dezelfde waarde in al uw toepassingen.

In dit voorbeeld van de installatie wordt MSAL 4.x gebruikt:

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

Schakel ook toegang tot de sleutelhanger in het Entitlements.plist bestand in. Gebruik de volgende toegangsgroep of uw eigen toegangsgroep.

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

Wanneer u de WithIosKeychainSecurityGroup() API gebruikt, voegt MSAL uw beveiligingsgroep automatisch toe aan het einde van de team-id van de toepassing (AppIdentifierPrefix). MSAL voegt uw beveiligingsgroep toe, omdat wanneer u uw toepassing in Xcode bouwt, dit hetzelfde doet. Daarom moeten de rechten in het Entitlements.plist bestand worden opgenomen $(AppIdentifierPrefix) vóór de toegangsgroep voor de sleutelhanger.

Zie de documentatie over iOS-rechten voor meer informatie.

Problemen met toegang tot sleutelhanger oplossen

Als er een foutbericht wordt weergegeven dat lijkt op 'De toepassing heeft geen toegang tot de iOS-sleutelhanger voor de uitgever van de toepassing (de TeamId is null)', betekent dit dat MSAL geen toegang heeft tot de sleutelhanger. Dit is een configuratieprobleem. Als u problemen wilt oplossen, probeert u zelf toegang te krijgen tot de sleutelhanger, bijvoorbeeld:

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

Tokencache delen inschakelen in iOS-toepassingen

Vanaf MSAL 2.x kunt u een sleutelhangertoegangsgroep opgeven om de tokencache in meerdere toepassingen te behouden. Met deze instelling kunt u de tokencache delen tussen verschillende toepassingen met dezelfde sleutelhangertoegangsgroep. U kunt de tokencache delen tussen ADAL.NET toepassingen, MSAL.NET Xamarin.iOS-toepassingen en systeemeigen iOS-toepassingen die zijn ontwikkeld in ADAL.objc of MSAL.objc.

Door de tokencache te delen, staat u eenmalige aanmelding (SSO) toe voor alle toepassingen die gebruikmaken van dezelfde sleutelhangertoegangsgroep.

Als u deze cache delen wilt inschakelen, gebruikt u de WithIosKeychainSecurityGroup() methode om de sleutelhangertoegangsgroep in te stellen op dezelfde waarde in alle toepassingen die dezelfde cache delen. In het eerste codevoorbeeld in dit artikel ziet u hoe u de methode gebruikt.

Eerder in dit artikel hebt u geleerd dat MSAL wordt toegevoegd $(AppIdentifierPrefix) wanneer u de WithIosKeychainSecurityGroup() API gebruikt. MSAL voegt dit element toe omdat de team-id AppIdentifierPrefix ervoor zorgt dat alleen toepassingen die door dezelfde uitgever worden gemaakt, toegang tot de sleutelhanger kunnen delen.

Notitie

De KeychainSecurityGroup eigenschap is afgeschaft. Gebruik in plaats daarvan de iOSKeychainSecurityGroup eigenschap. Het TeamId voorvoegsel is niet vereist wanneer u dit gebruikt iOSKeychainSecurityGroup.

Microsoft Authenticator gebruiken

Uw toepassing kan Microsoft Authenticator als broker gebruiken om het volgende in te schakelen:

  • SSO: Wanneer u eenmalige aanmelding inschakelt, hoeven uw gebruikers zich niet aan te melden bij elke toepassing.
  • Apparaatidentificatie: gebruik apparaatidentificatie om te verifiëren door toegang te krijgen tot het apparaatcertificaat. Dit certificaat wordt gemaakt op het apparaat wanneer het is toegevoegd aan de werkplek. Uw toepassing is gereed als de tenantbeheerders voorwaardelijke toegang met betrekking tot de apparaten inschakelen.
  • Verificatie van toepassingsidentificatie: wanneer een toepassing de broker aanroept, wordt de omleidings-URL doorgegeven. De broker controleert de omleidings-URL.

Zie Microsoft Authenticator of Microsoft Intune-bedrijfsportal gebruiken in Xamarin iOS- en Android-toepassingen voor meer informatie over het inschakelen van een broker.

Bekende problemen met iOS 12 en verificatie

Microsoft heeft een beveiligingsadvies uitgebracht over een incompatibiliteit tussen iOS 12 en sommige typen verificatie. De incompatibiliteit breekt sociale, WSFed- en OIDC-aanmeldingen. Het beveiligingsadvies helpt u te begrijpen hoe u ASP.NET beveiligingsbeperkingen verwijdert uit uw toepassingen om ze compatibel te maken met iOS 12.

Wanneer u MSAL.NET toepassingen op Xamarin iOS ontwikkelt, ziet u mogelijk een oneindige lus wanneer u zich probeert aan te melden bij websites vanuit iOS 12. Dergelijk gedrag is vergelijkbaar met dit ADAL-probleem op GitHub: Oneindige lus wanneer u zich probeert aan te melden bij de website vanaf iOS 12 #1329.

Mogelijk ziet u ook een onderbreking in ASP.NET Core OIDC-verificatie met iOS 12 Safari. Zie dit probleem met de WebKit voor meer informatie.

Bekende problemen met iOS 13 en verificatie

Als voor uw app ondersteuning voor voorwaardelijke toegang of certificaatverificatie is vereist, schakelt u uw app in om te communiceren met de Microsoft Authenticator-broker-app. MSAL is vervolgens verantwoordelijk voor het verwerken van aanvragen en antwoorden tussen uw toepassing en Microsoft Authenticator.

Op iOS 13 heeft Apple een belangrijke API-wijziging aangebracht door de mogelijkheid van de toepassing om de brontoepassing te lezen bij het ontvangen van een antwoord van een externe toepassing via aangepaste URL-schema's.

Apple-documentatie voor UIApplicationOpenURLOptionsSourceApplicationKey-statussen :

Als de aanvraag afkomstig is van een andere app die bij uw team hoort, stelt UIKit de waarde van deze sleutel in op de id van die app. Als de team-id van de oorspronkelijke app anders is dan de team-id van de huidige app, is de waarde van de sleutel nil.

Deze wijziging breekt af voor MSAL omdat deze is gebaseerd op UIApplication.SharedApplication.OpenUrl het verifiëren van de communicatie tussen MSAL en de Microsoft Authenticator-app.

Daarnaast moet de ontwikkelaar in iOS 13 een presentatiecontroller opgeven wanneer deze wordt gebruikt ASWebAuthenticationSession.

Uw app wordt beïnvloed als u bouwt met Xcode 11 en u iOS Broker of ASWebAuthenticationSession.

In dergelijke gevallen gebruikt u MSAL.NET 4.4.0+ om geslaagde verificatie in te schakelen.

Aanvullende vereisten

  • Wanneer u de nieuwste MSAL-bibliotheken gebruikt, moet u ervoor zorgen dat Microsoft Authenticator versie 6.3.19+ op het apparaat is geïnstalleerd.

  • Wanneer u bijwerkt naar MSAL.NET 4.4.0+, werkt u het LSApplicationQueriesSchemes bestand Info.plist bij en voegt u het volgende toemsauthv3:

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

    Toevoegen msauthv3 aan Info.plist is nodig om de aanwezigheid van de nieuwste Microsoft Authenticator-app te detecteren op het apparaat dat ondersteuning biedt voor iOS 13.

Een probleem melden

Als u vragen hebt of een probleem wilt melden dat u in MSAL.NET hebt gevonden, opent u een probleem in de microsoft-authentication-library-for-dotnet opslagplaats op GitHub.

Volgende stappen

Zie voor informatie over eigenschappen voor Xamarin iOS de alinea met specifieke overwegingen voor iOS van het README.md-bestand van het volgende voorbeeld:

Voorbeeld Platform Beschrijving
https://github.com/Azure-Samples/active-directory-xamarin-native-v2 Xamarin iOS, Android, Universeel Windows-platform (UWP) Een Xamarin Forms-app die laat zien hoe u MSAL.NET kunt gebruiken om werk- of schoolaccounts en persoonlijke Microsoft-accounts te verifiëren met het Microsoft Identity Platform en toegang te krijgen tot Microsoft Graph met het resulterende token.