Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Il Libreria di Autenticazione Microsoft (MSAL) per macOS e iOS supporta l'accesso Single Sign-On (SSO) tra app macOS/iOS e browser. Questo articolo illustra gli scenari SSO seguenti:
Questo tipo di accesso Single Sign-On funziona tra più app distribuite dallo stesso Sviluppatore Apple. Fornisce il Single Sign-On silenzioso, ossia senza richiedere le credenziali all'utente, leggendo i token di aggiornamento scritti da altre app nel keychain e scambiandoli silenziosamente con token di accesso.
Microsoft fornisce app denominate broker che consentono l'accesso SSO tra applicazioni di fornitori diversi, purché il dispositivo mobile sia registrato con Microsoft Entra ID. Questo tipo di accesso Single Sign-On richiede l'installazione di un'applicazione broker nel dispositivo dell'utente.
- SSO tra MSAL e Safari
L'accesso SSO viene ottenuto tramite la classe ASWebAuthenticationSession . Usa lo stato di accesso esistente da altre app e dal browser Safari. Non è limitato alle app distribuite dallo stesso Apple Developer, ma richiede un'interazione dell'utente.
Se si usa la visualizzazione Web predefinita nell'app per accedere agli utenti, si otterrà l'accesso SSO automatico tra applicazioni basate su MSAL e Safari. Per altre informazioni sulle visualizzazioni Web supportate da MSAL, vedere Personalizzare browser e WebViews.
Questo tipo di accesso Single Sign-On non è attualmente disponibile in macOS. MSAL in macOS supporta solo WKWebView che non dispone del supporto SSO con Safari.
Note
iOS cancella i cookie di sessione subito dopo l'accesso a causa dell'uso del browser temporaneo per eseguire l'accesso. Questo browser non condivide alcun cookie di sessione. Per consentire il funzionamento dell'accesso Single Sign-On in iOS, è necessario abilitare KMSI per l'utilizzo di cookie persistenti.
- SSO invisibile tra le app macOS/iOS ADAL e MSAL
Supporto di MSAL Objective-C per la migrazione e SSO con app basate su ADAL Objective-C. Le app devono essere distribuite dallo stesso Sviluppatore Apple.
Vedere SSO tra app ADAL e MSAL in macOS e iOS per istruzioni su SSO tra app tra ADAL e app basate su MSAL.
SSO invisibile all'utente tra le app
MSAL supporta la condivisione SSO tramite i gruppi di accesso keychain iOS.
Per abilitare l'accesso Single Sign-On tra le applicazioni, è necessario eseguire i passaggi seguenti, illustrati più in dettaglio di seguito:
- Assicurarsi che tutte le applicazioni usino lo stesso ID client o ID applicazione.
- Assicurarsi che tutte le applicazioni condividono lo stesso certificato di firma da Apple in modo da poter condividere keychain.
- Richiedi lo stesso entitlement del Portachiavi per ciascuna delle tue applicazioni.
- Specificare agli SDK MSAL il portachiavi condiviso da utilizzare se è diverso da quello predefinito.
Usare lo stesso ID client e ID applicazione
Affinché l'Microsoft Identity Platform sappia quali applicazioni possono condividere token, tali applicazioni devono condividere lo stesso ID client o ID applicazione. Si tratta dell'identificatore univoco fornito all'utente quando è stata registrata la prima applicazione nel portale.
Il modo in cui Microsoft Identity Platform distingue le app che usano lo stesso ID applicativo è tramite gli URI di reindirizzamento. Ogni applicazione può avere più URI di reindirizzamento registrati nel portale di onboarding. Ogni app della tua suite avrà un URI di reindirizzamento diverso. Per esempio:
URI di reindirizzamento App1: msauth.com.contoso.mytestapp1://auth
URI di reindirizzamento di App2: msauth.com.contoso.mytestapp2://auth
URI di reindirizzamento app3: msauth.com.contoso.mytestapp3://auth
Il formato degli URI di reindirizzamento deve essere compatibile con il formato supportato da MSAL, documentato nei requisiti di formato URI di reindirizzamento MSAL.
Configurare la condivisione keychain tra applicazioni
Consulta l'articolo di Apple Adding Capabilities per attivare la condivisione del portachiavi. Ciò che è importante è che tu decida come vuoi chiamare il tuo portachiavi e aggiunga questa capacità a tutte le tue applicazioni che saranno coinvolte nel single sign-on (SSO).
Una volta configurati correttamente i diritti, nella directory del progetto verrà visualizzato un file che contiene qualcosa entitlements.plist di simile all'esempio seguente:
<?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>
Aggiungere un nuovo gruppo keychain
Aggiungi un nuovo gruppo portachiavi al progetto Capabilities. Il gruppo keychain deve essere:
-
com.microsoft.adalcachesu iOS -
com.microsoft.identity.universalstoragesu macOS.
Per altre informazioni, vedere Gruppi keychain.
Configurare l'oggetto applicazione
Dopo aver abilitato l'autorizzazione del portachiavi in ciascuna delle tue applicazioni e una volta pronti a usare l'SSO, configura MSALPublicClientApplication con il gruppo di accesso del portachiavi, come mostrato nell'esempio seguente:
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
}
Avvertimento
Quando si condivide un portachiavi tra le applicazioni, qualsiasi applicazione può eliminare utenti o anche tutti i token nell'applicazione. Ciò è particolarmente significativo se si hanno applicazioni che si basano su token per eseguire operazioni in background. La condivisione di un portachiavi significa che è necessario prestare molta attenzione quando l'app utilizza le operazioni di rimozione di Microsoft Identity SDK.
Ecco fatto! L'SDK delle identità di Microsoft condividerà ora le credenziali in tutte le applicazioni. L'elenco di account verrà condiviso anche tra le istanze dell'applicazione.
SSO tramite broker di autenticazione su iOS
MSAL offre supporto per l'autenticazione negoziata con Microsoft Authenticator. Microsoft Authenticator fornisce l'accesso SSO per Microsoft Entra dispositivi registrati e consente anche all'applicazione di seguire i criteri di accesso condizionale.
La procedura seguente illustra come abilitare l'accesso SSO usando un broker di autenticazione per l'app:
Registrare un formato URI di reindirizzamento compatibile con broker per l'applicazione nell'info.plist dell'app. Il formato dell'URI di reindirizzamento compatibile con broker è
msauth.<app.bundle.id>://auth. Sostituire "<app.bundle.id>" con l'ID bundle dell'applicazione. Per esempio:<key>CFBundleURLSchemes</key> <array> <string>msauth.<app.bundle.id></string> </array>Aggiungi gli schemi seguenti all'Info.plist della tua app sotto
LSApplicationQueriesSchemes:<key>LSApplicationQueriesSchemes</key> <array> <string>msauthv2</string> <string>msauthv3</string> </array>Aggiungere quanto segue al
AppDelegate.mfile per gestire i callback: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) }
Se si usa Xcode 11, è consigliabile inserire il callback MSAL nel SceneDelegate file.
Se si supportano sia UISceneDelegate che UIApplicationDelegate per la compatibilità con iOS meno recenti, è necessario inserire il callback MSAL in entrambi i file.
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)
}