Abilitare le opzioni di autenticazione in un'app iOS Swift usando Azure AD B2C
Questo articolo descrive i modi in cui è possibile abilitare, personalizzare e migliorare l'esperienza di autenticazione di Azure Active Directory B2C (Azure AD B2C) per l'applicazione iOS Swift.
Prima di iniziare, acquisire familiarità con gli articoli seguenti:
- Configurare l'autenticazione in un'app Swift iOS di esempio usando Azure AD B2C
- Abilitare l'autenticazione nell'app Swift iOS usando Azure AD B2C
Usare un dominio personalizzato
Usando un dominio personalizzato, è possibile marcare completamente l'URL di autenticazione. Dal punto di vista dell'utente, gli utenti rimangono nel dominio durante il processo di autenticazione, anziché essere reindirizzati al nome di dominio b2clogin.com di Azure AD B2C.
Per rimuovere tutti i riferimenti a "b2c" nell'URL, è anche possibile sostituire il nome del tenant B2C, contoso.onmicrosoft.com, nell'URL della richiesta di autenticazione con il GUID ID tenant. Ad esempio, è possibile passare https://fabrikamb2c.b2clogin.com/contoso.onmicrosoft.com/
a https://account.contosobank.co.uk/<tenant ID GUID>/
.
Per usare un dominio personalizzato e l'ID tenant nell'URL di autenticazione, eseguire le operazioni seguenti:
- Seguire le indicazioni riportate in Abilitare i domini personalizzati.
- Aggiornare il membro della classe con il
kAuthorityHostName
dominio personalizzato. - Aggiornare il membro della classe con l'ID
kTenantName
tenant.
Il codice Swift seguente mostra le impostazioni dell'app prima della modifica:
let kTenantName = "contoso.onmicrosoft.com"
let kAuthorityHostName = "contoso.b2clogin.com"
Il codice Swift seguente mostra le impostazioni dell'app dopo la modifica:
let kTenantName = "00000000-0000-0000-0000-000000000000"
let kAuthorityHostName = "login.contoso.com"
Precompilare il nome di accesso
Durante un percorso utente di accesso, l'app potrebbe indirizzare un utente specifico. Quando un'app è destinata a un utente, può specificare nella richiesta di autorizzazione il parametro di query con il login_hint
nome di accesso dell'utente. Azure AD B2C popola automaticamente il nome di accesso e l'utente deve fornire solo la password.
Per prepopoulare il nome di accesso, eseguire le operazioni seguenti:
- Se si usa un criterio personalizzato, aggiungere l'attestazione di input necessaria, come descritto in Configurare l'accesso diretto.
- Cercare l'oggetto di configurazione di Microsoft Authentication Library (MSAL) e quindi aggiungere il
withLoginHint()
metodo con l'hint di accesso.
let parameters = MSALInteractiveTokenParameters(scopes: kScopes, webviewParameters: self.webViewParameters!)
parameters.promptType = .selectAccount
parameters.authority = authority
parameters.loginHint = "bob@contoso.com"
// More settings here
applicationContext.acquireToken(with: parameters) { (result, error) in
...
Selezionare un provider di identità
Se la procedura di accesso per l'applicazione è stata configurata per includere gli account di social networking, ad esempio Facebook, LinkedIn o Google, è possibile specificare il parametro domain_hint
. Questo parametro di query fornisce un hint ad Azure AD B2C sul provider di identità di social networking che deve essere usato per l'accesso. Ad esempio, se l'applicazione specifica domain_hint=facebook.com
, il flusso di accesso passa direttamente alla pagina di accesso di Facebook.
Per reindirizzare gli utenti a un provider di identità esterno, eseguire le operazioni seguenti:
- Controllare il nome di dominio del provider di identità esterno. Per altre informazioni, vedere Reindirizzare l'accesso a un provider di social network.
- Creare o usare un oggetto elenco esistente per archiviare parametri di query aggiuntivi.
- Aggiungere il parametro con il
domain_hint
nome di dominio corrispondente all'elenco , ad esempiofacebook.com
. - Passare l'elenco dei parametri di query aggiuntivi nell'attributo dell'oggetto di
extraQueryParameters
configurazione MSAL.
let extraQueryParameters: [String: String] = ["domain_hint": "facebook.com"]
let parameters = MSALInteractiveTokenParameters(scopes: kScopes, webviewParameters: self.webViewParameters!)
parameters.promptType = .selectAccount
parameters.authority = authority
parameters.extraQueryParameters = extraQueryParameters
// More settings here
applicationContext.acquireToken(with: parameters) { (result, error) in
...
Specificare la lingua dell'interfaccia utente
La personalizzazione del linguaggio in Azure AD B2C consente al flusso utente di soddisfare diverse lingue in base alle esigenze dei clienti. Per altre informazioni, vedere Personalizzazione della lingua.
Per impostare la lingua preferita, eseguire le operazioni seguenti:
- Configurare la personalizzazione della lingua.
- Creare o usare un oggetto elenco esistente per archiviare parametri di query aggiuntivi.
- Aggiungere il parametro con il
ui_locales
codice del linguaggio corrispondente all'elenco , ad esempioen-us
. - Passare l'elenco dei parametri di query aggiuntivi nell'attributo dell'oggetto di
extraQueryParameters
configurazione MSAL.
let extraQueryParameters: [String: String] = ["ui_locales": "en-us"]
let parameters = MSALInteractiveTokenParameters(scopes: kScopes, webviewParameters: self.webViewParameters!)
parameters.promptType = .selectAccount
parameters.authority = authority
parameters.extraQueryParameters = extraQueryParameters
// More settings here
applicationContext.acquireToken(with: parameters) { (result, error) in
...
Passare un parametro di stringa di query personalizzato
Con criteri personalizzati, è possibile passare un parametro di stringa di query personalizzato. Un buon esempio di caso d'uso è quando si vuole modificare dinamicamente il contenuto della pagina.
Per passare un parametro di stringa di query personalizzato, eseguire le operazioni seguenti:
- Configurare l'elemento ContentDefinitionParameters .
- Creare o usare un oggetto elenco esistente per archiviare parametri di query aggiuntivi.
- Aggiungere il parametro della stringa di query personalizzata, ad esempio
campaignId
. Impostare il valore del parametro , ad esempiogermany-promotion
. - Passare l'elenco dei parametri di query aggiuntivi nell'attributo dell'oggetto di
extraQueryParameters
configurazione MSAL.
let extraQueryParameters: [String: String] = ["campaignId": "germany-promotion"]
let parameters = MSALInteractiveTokenParameters(scopes: kScopes, webviewParameters: self.webViewParameters!)
parameters.promptType = .selectAccount
parameters.authority = authority
parameters.extraQueryParameters = extraQueryParameters
// More settings here
applicationContext.acquireToken(with: parameters) { (result, error) in
...
Passare un hint per il token ID
Un'applicazione relying party può inviare un token Web JSON in ingresso (JWT) come parte della richiesta di autorizzazione OAuth2. Il token in ingresso è un hint sull'utente o sulla richiesta di autorizzazione. Azure AD B2C convalida il token e quindi estrae l'attestazione.
Per includere un hint per il token ID nella richiesta di autenticazione, eseguire le operazioni seguenti:
- Nei criteri personalizzati definire un profilo tecnico dell'hint del token ID.
- Nel codice generare o acquisire un token ID e quindi impostare il token su una variabile , ad esempio
idToken
. - Creare o usare un oggetto elenco esistente per archiviare parametri di query aggiuntivi.
- Aggiungere il
id_token_hint
parametro con la variabile corrispondente che archivia il token ID. - Passare l'elenco dei parametri di query aggiuntivi nell'attributo dell'oggetto di
extraQueryParameters
configurazione MSAL.
let extraQueryParameters: [String: String] = ["id_token_hint": idToken]
let parameters = MSALInteractiveTokenParameters(scopes: kScopes, webviewParameters: self.webViewParameters!)
parameters.promptType = .selectAccount
parameters.authority = authority
parameters.extraQueryParameters = extraQueryParameters
// More settings here
applicationContext.acquireToken(with: parameters) { (result, error) in
...
Configurare la registrazione
La libreria MSAL genera messaggi di log che consentono di diagnosticare i problemi. L'app può configurare la registrazione. L'app può anche fornire il controllo personalizzato sul livello di dettaglio e se i dati personali e dell'organizzazione vengono registrati.
È consigliabile creare un callback di registrazione MSAL e fornire agli utenti un modo per inviare i log quando hanno problemi di autenticazione. MSAL offre questi livelli di dettaglio della registrazione:
- Errore: si è verificato un errore e è stato generato un errore. Questo livello viene usato per il debug e l'identificazione dei problemi.
- Avviso: non si è necessariamente verificato un errore o un errore, ma le informazioni sono destinate alla diagnostica e ai problemi di individuazione.
- Info: MSAL registra gli eventi destinati a scopi informativi e non necessariamente per il debug.
- Dettagliato: si tratta del livello predefinito. MSAL registra i dettagli completi del comportamento della libreria.
Per impostazione predefinita, il logger MSAL non acquisisce dati personali o aziendali. La libreria offre l'opzione per abilitare la registrazione dei dati personali e dell'organizzazione se si decide di farlo.
Il logger MSAL deve essere impostato il prima possibile nella sequenza di avvio dell'app prima che vengano eseguite richieste MSAL. Configurare la registrazione MSAL nel metodo AppDelegate.swiftapplication
.
Il frammento di codice seguente illustra come configurare la registrazione MSAL:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
MSALGlobalConfig.loggerConfig.logLevel = .verbose
MSALGlobalConfig.loggerConfig.setLogCallback { (logLevel, message, containsPII) in
// If PiiLoggingEnabled is set YES, this block will potentially contain sensitive information (Personally Identifiable Information), but not all messages will contain it.
// containsPII == YES indicates if a particular message contains PII.
// You might want to capture PII only in debug builds, or only if you take necessary actions to handle PII properly according to legal requirements of the region
if let displayableMessage = message {
if (!containsPII) {
#if DEBUG
// NB! This sample uses print just for testing purposes
// You should only ever log to NSLog in debug mode to prevent leaking potentially sensitive information
print(displayableMessage)
#endif
}
}
}
return true
}
Esperienza di visualizzazione Web incorporata
I Web browser sono necessari per l'autenticazione interattiva. Per impostazione predefinita, la libreria MSAL usa la visualizzazione Web del sistema. Durante l'accesso, la libreria MSAL visualizza la visualizzazione Web del sistema iOS con l'interfaccia utente di Azure AD B2C.
Per altre informazioni, vedere l'articolo Personalizza browser e WebViews per iOS/macOS .
A seconda dei requisiti, è possibile usare la visualizzazione Web incorporata. Esistono differenze di comportamento per l'accesso Single Sign-On tra la visualizzazione Web incorporata e la visualizzazione Web di sistema in MSAL.
Importante
È consigliabile usare il valore predefinito della piattaforma, che è normalmente il browser di sistema. Il browser di sistema offre prestazioni migliori nel ricordare gli utenti che hanno eseguito l'accesso in precedenza. Alcuni provider di identità, ad esempio Google, non supportano un'esperienza di visualizzazione incorporata.
Per modificare questo comportamento, modificare l'attributo webviewType
di MSALWebviewParameters
in wkWebView
. Nell'esempio seguente viene illustrato come modificare il tipo di visualizzazione Web in visualizzazione incorporata:
func initWebViewParams() {
self.webViewParameters = MSALWebviewParameters(authPresentationViewController: self)
// Use embedded view experience
self.webViewParameters?.webviewType = .wkWebView
}
Passaggi successivi
- Per altre informazioni, vedere OPZIONI di configurazione MSAL per iOS Swift.