Dela via


Överväganden för att använda Xamarin iOS med MSAL.NET

När du använder Microsoft Authentication Library för .NET (MSAL.NET) på Xamarin iOS bör du:

  • Åsidosätt och implementera OpenUrl funktionen i AppDelegate.
  • Aktivera nyckelringsgrupper.
  • Aktivera delning av tokencache.
  • Aktivera åtkomst till nyckelringar.
  • Förstå kända problem med iOS 12 och iOS 13 och autentisering.

Kommentar

MSAL.NET version 4.61.0 och senare ger inte stöd för UWP (Universal Windows Platform), Xamarin Android och Xamarin iOS. Vi rekommenderar att du migrerar dina Xamarin-program till moderna ramverk som MAUI. Läs mer om utfasningen i Meddelande om kommande utfasning av MSAL.NET för Xamarin och UWP.

Implementera OpenUrl

Åsidosätt metoden för OpenUrl den FormsApplicationDelegate härledda klassen och anropa AuthenticationContinuationHelper.SetAuthenticationContinuationEventArgs. Här är ett exempel:

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

Utför också följande uppgifter:

  • Definiera ett omdirigerings-URI-schema.
  • Kräv behörigheter för att appen ska kunna anropa en annan app.
  • Ha ett specifikt formulär för omdirigerings-URI:n.
  • Registrera en omdirigerings-URI i Azure-portalen.

Aktivera åtkomst till nyckelringar

Om du vill aktivera åtkomst till nyckelringar kontrollerar du att programmet har en åtkomstgrupp för nyckelringar. Du kan ange nyckelringens åtkomstgrupp när du skapar ditt program med hjälp av API:et WithIosKeychainSecurityGroup() .

Om du vill dra nytta av cacheminnet och enkel inloggning (SSO) anger du nyckelringens åtkomstgrupp till samma värde i alla dina program.

Det här exemplet på konfigurationen använder MSAL 4.x:

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

Aktivera även nyckelringsåtkomst i Entitlements.plist filen. Använd antingen följande åtkomstgrupp eller din egen åtkomstgrupp.

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

När du använder API:et WithIosKeychainSecurityGroup() lägger MSAL automatiskt till din säkerhetsgrupp i slutet av programmets team-ID (AppIdentifierPrefix). MSAL lägger till din säkerhetsgrupp eftersom den kommer att göra samma sak när du skapar ditt program i Xcode. Det är därför berättigandena i Entitlements.plist filen måste inkluderas $(AppIdentifierPrefix) före nyckelringens åtkomstgrupp.

Mer information finns i dokumentationen om iOS-berättiganden.

Felsöka åtkomst till nyckelringar

Om du får ett felmeddelande som liknar "Programmet kan inte komma åt iOS-nyckelringen för programutgivaren (TeamId är null)" innebär det att MSAL inte kan komma åt nyckelringen. Det här är ett konfigurationsproblem. Om du vill felsöka kan du prova att komma åt nyckelringen på egen hand, till exempel:

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

Aktivera delning av tokencache mellan iOS-program

Från och med MSAL 2.x kan du ange en nyckelringsåtkomstgrupp för att spara tokencachen i flera program. Med den här inställningen kan du dela tokencachen mellan flera program som har samma nyckelringsåtkomstgrupp. Du kan dela tokencachen mellan ADAL.NET program, MSAL.NET Xamarin.iOS-program och interna iOS-program som har utvecklats i ADAL.objc eller MSAL.objc.

Genom att dela tokencachen tillåter du enkel inloggning (SSO) bland alla program som använder samma nyckelringsåtkomstgrupp.

Om du vill aktivera den här cachedelningen WithIosKeychainSecurityGroup() använder du metoden för att ange nyckelringsåtkomstgruppen till samma värde i alla program som delar samma cache. Det första kodexemplet i den här artikeln visar hur du använder metoden.

Tidigare i den här artikeln lärde du dig att MSAL lägger till $(AppIdentifierPrefix) när du använder API:et WithIosKeychainSecurityGroup() . MSAL lägger till det här elementet eftersom team-ID:t AppIdentifierPrefix säkerställer att endast program som görs av samma utgivare kan dela nyckelringsåtkomst.

Kommentar

Egenskapen KeychainSecurityGroup är inaktuell. Använd egenskapen iOSKeychainSecurityGroup i stället. Prefixet TeamId krävs inte när du använder iOSKeychainSecurityGroup.

Använda Microsoft Authenticator

Ditt program kan använda Microsoft Authenticator som asynkron meddelandekö för att aktivera:

  • Enkel inloggning: När du aktiverar enkel inloggning behöver användarna inte logga in på varje program.
  • Enhetsidentifiering: Använd enhetsidentifiering för att autentisera genom att komma åt enhetscertifikatet. Det här certifikatet skapas på enheten när det är anslutet till arbetsplatsen. Programmet är klart om klientadministratörerna aktiverar villkorlig åtkomst som är relaterad till enheterna.
  • Verifiering av programidentifiering: När ett program anropar asynkron meddelandekö skickas dess omdirigerings-URL. Asynkron meddelandekö verifierar omdirigerings-URL:en.

Mer information om hur du aktiverar en asynkron meddelandekö finns i Använda Microsoft Authenticator eller Microsoft Intune-företagsportalen i Xamarin iOS- och Android-program.

Kända problem med iOS 12 och autentisering

Microsoft släppte en säkerhetsrekommendation om inkompatibilitet mellan iOS 12 och vissa typer av autentisering. Inkompatibiliteten bryter sociala, WSFed- och OIDC-inloggningar. Säkerhetsrådgivningen hjälper dig att förstå hur du tar bort ASP.NET säkerhetsbegränsningar från dina program för att göra dem kompatibla med iOS 12.

När du utvecklar MSAL.NET program på Xamarin iOS kan du se en oändlig loop när du försöker logga in på webbplatser från iOS 12. Det här beteendet liknar det här ADAL-problemet på GitHub: Oändlig loop när du försöker logga in på webbplatsen från iOS 12 #1329.

Du kan också se en paus i ASP.NET Core OIDC-autentisering med iOS 12 Safari. Mer information finns i det här WebKit-problemet.

Kända problem med iOS 13 och autentisering

Om appen kräver stöd för villkorsstyrd åtkomst eller certifikatautentisering kan du aktivera appen för att kommunicera med Microsoft Authenticator-mäklarappen. MSAL ansvarar sedan för att hantera begäranden och svar mellan ditt program och Microsoft Authenticator.

På iOS 13 gjorde Apple en icke-bakåtkompatibel API-ändring genom att ta bort programmets möjlighet att läsa källprogrammet när ett svar togs emot från ett externt program via anpassade URL-scheman.

Apples dokumentation för UIApplicationOpenURLOptionsSourceApplicationKey säger:

Om begäran kommer från en annan app som tillhör ditt team anger UIKit värdet för den här nyckeln till appens ID. Om teamidentifieraren för den ursprungliga appen skiljer sig från teamidentifieraren för den aktuella appen är värdet för nyckeln noll.

Den här ändringen går inte att utföra för MSAL eftersom den förlitade sig på UIApplication.SharedApplication.OpenUrl att verifiera kommunikationen mellan MSAL och Microsoft Authenticator-appen.

Dessutom måste utvecklaren på iOS 13 tillhandahålla en presentationskontrollant när du använder ASWebAuthenticationSession.

Din app påverkas om du skapar med Xcode 11 och du använder antingen iOS Broker eller ASWebAuthenticationSession.

I sådana fall kan du använda MSAL.NET 4.4.0+ för att aktivera lyckad autentisering.

Ytterligare krav

  • När du använder de senaste MSAL-biblioteken kontrollerar du att Microsoft Authenticator version 6.3.19+ är installerad på enheten.

  • När du uppdaterar till MSAL.NET 4.4.0+, uppdaterar du LSApplicationQueriesSchemes filen i Info.plist och lägger till msauthv3:

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

    Att lägga msauthv3 till i Info.plist är nödvändigt för att identifiera förekomsten av den senaste Microsoft Authenticator-appen på den enhet som stöder iOS 13.

Rapportera ett problem

Om du har frågor eller vill rapportera ett problem som du har hittat i MSAL.NET öppnar du ett problem på lagringsplatsen microsoft-authentication-library-for-dotnet på GitHub.

Nästa steg

Information om egenskaper för Xamarin iOS finns i avsnittet om iOS-specifika överväganden i följande exempels README.md-fil:

Exempel Plattform beskrivning
https://github.com/Azure-Samples/active-directory-xamarin-native-v2 Xamarin iOS, Android, Universal Windows Platform (UWP) En Xamarin Forms-app som visar hur du använder MSAL.NET för att autentisera arbets- eller skolkonton och Personliga Microsoft-konton med Microsoft platforma za identitete och få åtkomst till Microsoft Graph med den resulterande token.