Konfigurera enkel inloggning i macOS och iOS

Microsoft Authentication Library (MSAL) för macOS och iOS stöder enkel inloggning (SSO) mellan macOS/iOS-appar och webbläsare. Den här artikeln beskriver följande scenarier med enkel inloggning:

Den här typen av enkel inloggning fungerar mellan flera appar som distribueras av samma Apple Developer. Det ger tyst enkel inloggning (det vill: användaren uppmanas inte att ange autentiseringsuppgifter) genom att läsa uppdateringstoken som skrivits av andra appar från nyckelringen och byta ut dem mot åtkomsttoken tyst.

Microsoft tillhandahåller appar som kallas brokers som aktiverar enkel inloggning mellan program från olika leverantörer så länge den mobila enheten är registrerad med Microsoft Entra-ID. Den här typen av enkel inloggning kräver att ett koordinatorprogram installeras på användarens enhet.

  • Enkel inloggning mellan MSAL och Safari

Enkel inloggning uppnås via klassen ASWebAuthenticationSession . Den använder befintligt inloggningstillstånd från andra appar och Safari-webbläsaren. Det är inte begränsat till appar som distribueras av samma Apple Developer, men det kräver viss användarinteraktion.

Om du använder standardwebbvyn i din app för att logga in användare får du automatisk enkel inloggning mellan MSAL-baserade program och Safari. Mer information om de webbvyer som MSAL stöder finns i Anpassa webbläsare och WebViews.

Den här typen av enkel inloggning är för närvarande inte tillgänglig på macOS. MSAL på macOS stöder endast WKWebView som inte har stöd för enkel inloggning med Safari.

Kommentar

iOS rensar sessionscookies direkt efter inloggningen på grund av användningen av tillfällig webbläsare för att utföra inloggning. Den här webbläsaren delar inte någon av sessionscookies. För att SSO ska fungera i iOS måste KMSI vara aktiverat för att använda beständiga cookies.

  • Tyst enkel inloggning mellan ADAL- och MSAL macOS/iOS-appar

MSAL Objective-C stöder migrering och enkel inloggning med ADAL Objective-C-baserade appar. Apparna måste distribueras av samma Apple Developer.

Se Enkel inloggning mellan ADAL- och MSAL-appar på macOS och iOS för instruktioner för enkel inloggning mellan appar mellan ADAL- och MSAL-baserade appar.

Tyst enkel inloggning mellan appar

MSAL stöder SSO-delning via åtkomstgrupper för iOS-nyckelringar.

Om du vill aktivera enkel inloggning i dina program måste du utföra följande steg, som beskrivs mer detaljerat nedan:

  1. Se till att alla dina program använder samma klient-ID eller program-ID.
  2. Se till att alla dina program delar samma signeringscertifikat från Apple så att du kan dela nyckelringar.
  3. Begär samma nyckelringsrättigheter för vart och ett av dina program.
  4. Berätta för MSAL-SDK:erna om den delade nyckelringen som du vill att vi ska använda om den skiljer sig från standardnyckeln.

Använd samma klient-ID och program-ID

För att Microsofts identitetsplattform ska veta vilka program som kan dela token måste dessa program dela samma klient-ID eller program-ID. Det här är den unika identifierare som angavs för dig när du registrerade ditt första program i portalen.

Det sätt på vilket Microsofts identitetsplattform talar om för appar som använder samma program-ID är av deras omdirigerings-URI:er. Varje program kan ha flera omdirigerings-URI:er registrerade i onboarding-portalen. Varje app i din svit har en annan omdirigerings-URI. Till exempel:

Omdirigerings-URI för App1: msauth.com.contoso.mytestapp1://auth
Omdirigerings-URI för App2: msauth.com.contoso.mytestapp2://auth
Omdirigerings-URI för App3: msauth.com.contoso.mytestapp3://auth

Formatet för omdirigerings-URI:er måste vara kompatibelt med formatet MSAL stöder, vilket dokumenteras i krav för MSAL-omdirigerings-URI.

Konfigurera nyckelringsdelning mellan program

Läs artikeln Lägga till funktioner i Apple för att aktivera delning av nyckelringar. Det viktiga är att du bestämmer vad du vill att din nyckelring ska anropas och lägger till den funktionen i alla dina program som kommer att ingå i enkel inloggning.

När du har konfigurerat berättigandena korrekt visas en entitlements.plist fil i projektkatalogen som innehåller något som liknar det här exemplet:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>keychain-access-groups</key>
    <array>
        <string>$(AppIdentifierPrefix)com.myapp.mytestapp</string>
        <string>$(AppIdentifierPrefix)com.myapp.mycache</string>
    </array>
</dict>
</plist>

Lägga till en ny nyckelringsgrupp

Lägg till en ny nyckelringsgrupp i projektet Funktioner. Nyckelringsgruppen ska vara:

  • com.microsoft.adalcache på iOS
  • com.microsoft.identity.universalstorage på macOS.

keychain example

Mer information finns i nyckelringsgrupper.

Konfigurera programobjektet

När du har aktiverat nyckelringens berättigande i vart och ett av dina program och du är redo att använda enkel inloggning konfigurerar MSALPublicClientApplication du med din nyckelringsåtkomstgrupp som i följande exempel:

Objective-C:

NSError *error = nil;
MSALPublicClientApplicationConfig *configuration = [[MSALPublicClientApplicationConfig alloc] initWithClientId:@"<my-client-id>"];
configuration.cacheConfig.keychainSharingGroup = @"my.keychain.group";

MSALPublicClientApplication *application = [[MSALPublicClientApplication alloc] initWithConfiguration:configuration error:&error];

Swift:

let config = MSALPublicClientApplicationConfig(clientId: "<my-client-id>")
config.cacheConfig.keychainSharingGroup = "my.keychain.group"

do {
   let application = try MSALPublicClientApplication(configuration: config)
  // continue on with application
} catch let error as NSError {
  // handle error here
}

Varning

När du delar en nyckelring i dina program kan alla program ta bort användare eller till och med alla token i programmet. Detta är särskilt effektfullt om du har program som förlitar sig på token för att utföra bakgrundsarbete. Att dela en nyckelring innebär att du måste vara mycket försiktig när din app använder Microsoft identity SDK-borttagningsåtgärder.

Det var allt! Microsoft identity SDK delar nu autentiseringsuppgifter i alla dina program. Kontolistan delas också mellan programinstanser.

Enkel inloggning via autentiseringskoordinator på iOS

MSAL har stöd för asynkron autentisering med Microsoft Authenticator. Microsoft Authenticator tillhandahåller enkel inloggning för Microsoft Entra-registrerade enheter och hjälper även ditt program att följa principer för villkorsstyrd åtkomst.

Följande steg är hur du aktiverar enkel inloggning med hjälp av en autentiseringskoordinator för din app:

  1. Registrera ett broker-kompatibelt omdirigerings-URI-format för programmet i appens Info.plist. Det koordinatorkompatibla omdirigerings-URI-formatet är msauth.<app.bundle.id>://auth. Ersätt "<app.bundle.id>" med programmets paket-ID. Till exempel:

    <key>CFBundleURLSchemes</key>
    <array>
        <string>msauth.<app.bundle.id></string>
    </array>
    
  2. Lägg till följande scheman i appens Info.plist under LSApplicationQueriesSchemes:

    <key>LSApplicationQueriesSchemes</key>
    <array>
         <string>msauthv2</string>
         <string>msauthv3</string>
    </array>
    
  3. Lägg till följande i AppDelegate.m filen för att hantera motringningar:

    Objective-C:

    - (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString *,id> *)options
    {
        return [MSALPublicClientApplication handleMSALResponse:url sourceApplication:options[UIApplicationOpenURLOptionsSourceApplicationKey]];
    }
    

    Swift:

    func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
        return MSALPublicClientApplication.handleMSALResponse(url, sourceApplication: options[UIApplication.OpenURLOptionsKey.sourceApplication] as? String)
    }
    

Om du använder Xcode 11 bör du placera MSAL-återanrop i filen i SceneDelegate stället. Om du stöder både UISceneDelegate och UIApplicationDelegate för kompatibilitet med äldre iOS måste MSAL-motringning placeras i båda filerna.

Objective-C:

 - (void)scene:(UIScene *)scene openURLContexts:(NSSet<UIOpenURLContext *> *)URLContexts
 {
     UIOpenURLContext *context = URLContexts.anyObject;
     NSURL *url = context.URL;
     NSString *sourceApplication = context.options.sourceApplication;

     [MSALPublicClientApplication handleMSALResponse:url sourceApplication:sourceApplication];
 }

Swift:

func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) {

        guard let urlContext = URLContexts.first else {
            return
        }

        let url = urlContext.url
        let sourceApp = urlContext.options.sourceApplication

        MSALPublicClientApplication.handleMSALResponse(url, sourceApplication: sourceApp)
    }

Nästa steg

Läs mer om autentiseringsflöden och programscenarier