Considerazioni sull'uso di Xamarin iOS con MSAL.NET
Quando si usa Microsoft Authentication Library per .NET (MSAL.NET) in Xamarin iOS, è necessario:
- Eseguire l'override e implementare la
OpenUrl
funzione inAppDelegate
. - Abilitare i gruppi keychain.
- Abilitare la condivisione della cache dei token.
- Abilitare l'accesso keychain.
- Informazioni sui problemi noti con iOS 12 e iOS 13 e l'autenticazione.
Nota
MSAL.NET versioni 4.61.0 e successive non forniscono supporto per la piattaforma UWP (Universal Windows Platform), Xamarin Android e Xamarin iOS. È consigliabile eseguire la migrazione delle applicazioni Xamarin a framework moderni come MAUI. Altre informazioni sulla deprecazione in Annuncio della prossima deprecazione di MSAL.NET per Xamarin e UWP.
Implementare OpenUrl
Eseguire l'override del OpenUrl
metodo della FormsApplicationDelegate
classe derivata e chiamare AuthenticationContinuationHelper.SetAuthenticationContinuationEventArgs
. Ecco un esempio:
public override bool OpenUrl(UIApplication app, NSUrl url, NSDictionary options)
{
AuthenticationContinuationHelper.SetAuthenticationContinuationEventArgs(url);
return true;
}
Eseguire anche le attività seguenti:
- Definire uno schema URI di reindirizzamento.
- Richiedere le autorizzazioni per l'app per chiamare un'altra app.
- Disporre di un modulo specifico per l'URI di reindirizzamento.
- Registrare un URI di reindirizzamento nella portale di Azure.
Abilitare l'accesso keychain
Per abilitare l'accesso keychain, assicurarsi che l'applicazione disponga di un gruppo di accesso keychain. È possibile impostare il gruppo di accesso keychain quando si crea l'applicazione usando l'API WithIosKeychainSecurityGroup()
.
Per trarre vantaggio dalla cache e dall'accesso Single Sign-On (SSO), impostare il gruppo di accesso keychain sullo stesso valore in tutte le applicazioni.
Questo esempio di installazione usa MSAL 4.x:
var builder = PublicClientApplicationBuilder
.Create(ClientId)
.WithIosKeychainSecurityGroup("com.microsoft.adalcache")
.Build();
Abilitare anche l'accesso keychain nel Entitlements.plist
file. Usare il gruppo di accesso seguente o il proprio gruppo di accesso.
<dict>
<key>keychain-access-groups</key>
<array>
<string>$(AppIdentifierPrefix)com.microsoft.adalcache</string>
</array>
</dict>
Quando si usa l'APIWithIosKeychainSecurityGroup()
, MSAL aggiunge automaticamente il gruppo di sicurezza alla fine dell'ID team dell'applicazione (AppIdentifierPrefix
). MSAL aggiunge il gruppo di sicurezza perché quando si compila l'applicazione in Xcode, la stessa operazione verrà eseguita. Ecco perché i diritti nel Entitlements.plist
file devono essere inclusi $(AppIdentifierPrefix)
prima del gruppo di accesso keychain.
Per altre informazioni, vedere la documentazione relativa ai diritti iOS.
Risoluzione dei problemi di accesso keychain
Se viene visualizzato un messaggio di errore simile a "L'applicazione non è in grado di accedere al keychain iOS per l'editore dell'applicazione (TeamId è null)", significa che MSAL non è in grado di accedere a KeyChain. Si tratta di un problema di configurazione. Per risolvere i problemi, provare ad accedere a KeyChain autonomamente, ad esempio:
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
Abilitare la condivisione della cache dei token tra applicazioni iOS
A partire da MSAL 2.x, è possibile specificare un gruppo di accesso keychain per rendere persistente la cache dei token in più applicazioni. Questa impostazione consente di condividere la cache dei token tra diverse applicazioni con lo stesso gruppo di accesso keychain. È possibile condividere la cache dei token tra applicazioni ADAL.NET , MSAL.NET applicazioni Xamarin.iOS e applicazioni iOS native sviluppate in ADAL.objc o MSAL.objc.
Condividendo la cache dei token, è possibile consentire l'accesso Single Sign-On (SSO) tra tutte le applicazioni che usano lo stesso gruppo di accesso keychain.
Per abilitare la condivisione della cache, usare il metodo per impostare il WithIosKeychainSecurityGroup()
gruppo di accesso keychain sullo stesso valore in tutte le applicazioni che condividono la stessa cache. Il primo esempio di codice di questo articolo illustra come usare il metodo .
In precedenza in questo articolo si è appreso che MSAL viene aggiunto $(AppIdentifierPrefix)
ogni volta che si usa l'API WithIosKeychainSecurityGroup()
. MSAL aggiunge questo elemento perché l'ID AppIdentifierPrefix
del team garantisce che solo le applicazioni create dallo stesso editore possano condividere l'accesso keychain.
Nota
La KeychainSecurityGroup
proprietà è deprecata. Utilizzare in alternativa la proprietà iOSKeychainSecurityGroup
. Il TeamId
prefisso non è obbligatorio quando si usa iOSKeychainSecurityGroup
.
Usare Microsoft Authenticator
L'applicazione può usare Microsoft Authenticator come broker per abilitare:
- SSO: quando si abilita l'accesso SSO, gli utenti non devono accedere a ogni applicazione.
- Identificazione dispositivo: usare l'identificazione del dispositivo per eseguire l'autenticazione accedendo al certificato del dispositivo. Questo certificato viene creato nel dispositivo quando viene aggiunto all'area di lavoro. L'applicazione sarà pronta se gli amministratori tenant abilitano l'accesso condizionale correlato ai dispositivi.
- Verifica dell'identificazione dell'applicazione: quando un'applicazione chiama il broker, passa l'URL di reindirizzamento. Il broker verifica l'URL di reindirizzamento.
Per informazioni dettagliate su come abilitare un broker, vedere Usare Microsoft Authenticator o Microsoft Portale aziendale Intune nelle applicazioni Xamarin iOS e Android.
Problemi noti con iOS 12 e l'autenticazione
Microsoft ha rilasciato un avviso di sicurezza relativo a un'incompatibilità tra iOS 12 e alcuni tipi di autenticazione. L'incompatibilità interrompe gli accessi di social networking, WSFed e OIDC. L'avviso di sicurezza consente di comprendere come rimuovere le restrizioni di sicurezza ASP.NET dalle applicazioni per renderle compatibili con iOS 12.
Quando si sviluppano applicazioni MSAL.NET in Xamarin iOS, è possibile che venga visualizzato un ciclo infinito quando si tenta di accedere ai siti Web da iOS 12. Questo comportamento è simile a questo problema di ADAL in GitHub: ciclo infinito quando si tenta di accedere al sito Web da iOS 12 #1329.
È anche possibile che venga visualizzata un'interruzione ASP.NET'autenticazione OIDC core con iOS 12 Safari. Per altre informazioni, vedere questo problema del WebKit.
Problemi noti con iOS 13 e l'autenticazione
Se l'app richiede il supporto per l'accesso condizionale o l'autenticazione del certificato, abilitare l'app per comunicare con l'app broker Microsoft Authenticator. MSAL è quindi responsabile della gestione delle richieste e delle risposte tra l'applicazione e Microsoft Authenticator.
In iOS 13 Apple ha apportato una modifica dell'API di rilievo rimuovendo la possibilità dell'applicazione di leggere l'applicazione di origine quando riceve una risposta da un'applicazione esterna tramite schemi URL personalizzati.
Documentazione di Apple per gli stati UIApplicationOpenURLOptionsSourceApplicationKey :
Se la richiesta ha avuto origine da un'altra app appartenente al team, UIKit imposta il valore di questa chiave sull'ID dell'app. Se l'identificatore del team dell'app di origine è diverso dall'identificatore del team dell'app corrente, il valore della chiave è nil.
Questa modifica causa un'interruzione per MSAL perché si basa su UIApplication.SharedApplication.OpenUrl
per verificare la comunicazione tra MSAL e l'app Microsoft Authenticator.
Inoltre, in iOS 13, lo sviluppatore deve fornire un controller di presentazione quando si usa ASWebAuthenticationSession
.
L'app è interessata se si compila con Xcode 11 e si usa il broker iOS o ASWebAuthenticationSession
.
In questi casi, usare MSAL.NET 4.4.0+ per abilitare l'autenticazione riuscita.
Requisiti aggiuntivi
Quando si usano le librerie MSAL più recenti, assicurarsi che Microsoft Authenticator versione 6.3.19+ sia installato nel dispositivo.
Quando si esegue l'aggiornamento a MSAL.NET 4.4.0+, aggiornare nel
LSApplicationQueriesSchemes
file Info.plist e aggiungeremsauthv3
:<key>LSApplicationQueriesSchemes</key> <array> <string>msauthv2</string> <string>msauthv3</string> </array>
L'aggiunta
msauthv3
a Info.plist è necessaria per rilevare la presenza dell'app Microsoft Authenticator più recente nel dispositivo che supporta iOS 13.
Segnala un problema
Se si hanno domande o si vuole segnalare un problema riscontrato in MSAL.NET, aprire un problema nel microsoft-authentication-library-for-dotnet
repository in GitHub.
Passaggi successivi
Per informazioni sulle proprietà per Xamarin iOS, vedere il paragrafo considerazioni specifiche di iOS del file di README.md dell'esempio seguente:
Esempio | Piattaforma | Descrizione |
---|---|---|
https://github.com/Azure-Samples/active-directory-xamarin-native-v2 | Xamarin iOS, Android, piattaforma UWP (Universal Windows Platform) (UWP) | Un'app Xamarin Forms che illustra come usare MSAL.NET per autenticare gli account aziendali o dell'istituto di istruzione e microsoft personali con Microsoft Identity Platform e accedere a Microsoft Graph con il token risultante. |