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.
Questo articolo illustra come configurare Servizio app di Azure o Funzioni di Azure per usare Accedi con Apple come provider di autenticazione.
Per completare la procedura descritta in questo articolo, è necessario registrarsi al programma per sviluppatori Apple. Per iscriversi al programma per sviluppatori Apple, passare a developer.apple.com/programs/enroll.
Attenzione
L'abilitazione dell'accesso con Apple disabilita la gestione della funzionalità autenticazione e autorizzazione del servizio app per l'applicazione tramite alcuni client, ad esempio il portale di Azure, l'interfaccia della riga di comando di Azure e Azure PowerShell. La funzionalità si basa su una nuova superficie API, che, durante l'anteprima, non è ancora usata in tutte le esperienze di gestione.
Creare un'applicazione nel portale Apple Developer
Creare un ID app e un ID servizio nel portale Apple Developer.
Nel portale Apple Developer passare a Certificati, Identificatori e Profili.
Nella scheda Identificatori selezionare il pulsante (+).
Nella pagina Registra un nuovo identificatore scegliere ID app e selezionare Continua. Gli ID app includono uno o più ID di servizio.
Nella pagina Registra un ID app specificare una descrizione e un ID bundle.
Nell'elenco delle funzionalità selezionare Accedi con Applee quindi continua. Prendere nota, in questo passaggio, del Prefisso ID dell'app (ID del team). Sarà necessario in un secondo momento.
Esaminare le informazioni di registrazione dell'app e selezionare Registra.
Anche in questo caso, nella scheda Identificatori selezionare il pulsante (+).
Nella pagina Registra un nuovo identificatore scegliere ID servizi e selezionare Continua.
Nella pagina Registra un ID di servizi specificare una descrizione e un identificatore. Selezionare quindi Configura.
La descrizione è ciò che l'utente vede nella schermata di consenso. L'identificatore è l'ID client usato per configurare il provider Apple con il servizio app.
Nella finestra di dialogo impostare l'ID app primaria sull'ID app creato in precedenza. Specificare il dominio dell'applicazione nella sezione dominio. Per l'URL restituito, usare l'URL
<app-url>/.auth/login/apple/callback. Ad esempio:https://contoso.azurewebsites.net/.auth/login/apple/callback. Selezionare quindi Aggiungi e Salva.
Esaminare le informazioni di registrazione del servizio e quindi selezionare Salva.
Generare il segreto del client
Apple richiede agli sviluppatori di app di creare e firmare un token JSON Web (JWT) come valore del segreto client. Per generare questo segreto, generare e scaricare prima una chiave privata a curva ellittica dal portale Apple Developer. Usare quindi tale chiave per firmare un token JWT con un payload specifico.
Creare e scaricare la chiave privata
- Nella scheda Chiavi del portale Apple Developer scegliere Crea una chiave o selezionare il pulsante (+).
- Nella pagina Registra una nuova chiave assegnare un nome alla chiave, selezionare Accedi con Apple e selezionare Configura.
- Nella pagina Configura chiave collegare la chiave all'ID app primario creato in precedenza e selezionare Salva.
- Completare la creazione della chiave confermando le informazioni e selezionando Continua. Esaminare quindi le informazioni e selezionare Registra.
- Nella pagina Scarica la chiave scaricare la chiave. Viene scaricato come
.p8file (PKCS#8). Usare il contenuto del file per firmare il token JWT del segreto del client.
Strutturare il token JWT del segreto client
Apple richiede che il segreto client sia la codifica base64 di un token JWT. Il token JWT decodificato deve avere un payload strutturato come nell'esempio seguente:
{
"alg": "ES256",
"kid": "URKEYID001",
}.{
"sub": "com.yourcompany.app1",
"nbf": 1560203207,
"exp": 1560289607,
"iss": "ABC123DEFG",
"aud": "https://appleid.apple.com"
}.[Signature]
- sub: ID cliente Apple, anche ID del servizio
- iss: ID del team per sviluppatori Apple
- aud: Apple riceve il token, quindi sono il pubblico
- exp: Non più di sei mesi dopo nbf
La versione con codifica Base64 di questo payload è simile alla seguente:
eyJhbGciOiJFUzI1NiIsImtpZCI6IlVSS0VZSUQwMDEifQ.eyJzdWIiOiJjb20ueW91cmNvbXBhbnkuYXBwMSIsIm5iZiI6MTU2MDIwMzIwNywiZXhwIjoxNTYwMjg5NjA3LCJpc3MiOiJBQkMxMjNERUZHIiwiYXVkIjoiaHR0cHM6Ly9hcHBsZWlkLmFwcGxlLmNvbSJ9.ABSXELWuTbgqfrIUz7bLi6nXvkXAz5O8vt0jB2dSHTQTib1x1DSP4__4UrlKI-pdzNg1sgeocolPNTmDKazO8-BHAZCsdeeTNlgFEzBytIpMKFfVEQbEtGRkam5IeclUK7S9oOva4EK4jV4VmgDrr-LGWWO3TaAxAvy3_ZoKohvFFkVG
Nota
Apple non accetta JWT dei segreti client con una data di scadenza superiore a sei mesi dalla creazione, o dalla data nbf. È necessario aggiornare il segreto del client, almeno ogni sei mesi.
Per altre informazioni sulla generazione e la convalida dei token, vedere la documentazione per sviluppatori di Apple.
Firmare il token JWT del segreto client
Si utilizza il .p8 file scaricato in precedenza per firmare il token JWT del segreto client. Questo file è un file PKCS#8 che contiene la chiave di firma privata in formato PEM. Sono disponibili molte librerie che possono creare e firmare automaticamente il token JWT.
Esistono diversi tipi di librerie open source disponibili online per la creazione e la firma di JWT. Per altre informazioni sulla generazione di token JWT, vedere Token Web JSON (JWT).
Ad esempio, un modo per generare il segreto client consiste nell'importare il pacchetto NuGet Microsoft.IdentityModel.Tokens ed eseguire il codice C# illustrato di seguito:
using Microsoft.IdentityModel.Tokens;
public static string GetAppleClientSecret(string teamId, string clientId, string keyId, string p8key)
{
string audience = "https://appleid.apple.com";
string issuer = teamId;
string subject = clientId;
string kid = keyId;
IList<Claim> claims = new List<Claim> {
new Claim ("sub", subject)
};
CngKey cngKey = CngKey.Import(Convert.FromBase64String(p8key), CngKeyBlobFormat.Pkcs8PrivateBlob);
SigningCredentials signingCred = new SigningCredentials(
new ECDsaSecurityKey(new ECDsaCng(cngKey)),
SecurityAlgorithms.EcdsaSha256
);
JwtSecurityToken token = new JwtSecurityToken(
issuer,
audience,
claims,
DateTime.Now,
DateTime.Now.AddDays(180),
signingCred
);
token.Header.Add("kid", kid);
token.Header.Remove("typ");
JwtSecurityTokenHandler tokenHandler = new JwtSecurityTokenHandler();
return tokenHandler.WriteToken(token);
}
- teamId: ID del team per sviluppatori Apple
- clientId: ID client Apple, anche l'ID del servizio
-
p8key: chiave di formato PEM. È possibile ottenere la chiave aprendo il
.p8file in un editor di testo e copiando tutto tra-----BEGIN PRIVATE KEY-----e-----END PRIVATE KEY-----senza interruzioni di riga. - keyId: ID della chiave scaricata
Questo token restituito è il valore del segreto client usato per configurare il provider Apple.
Importante
Il segreto client è un'importante credenziale di sicurezza. Non condividere questo segreto con nessuno o distribuirlo in un'applicazione client.
Aggiungere il segreto client come impostazione dell'applicazione per l'app, scegliendo un nome di impostazione a piacere. Prendere nota di questo nome per dopo.
Aggiungere informazioni sul provider all'applicazione
Nota
La configurazione necessaria è in un nuovo formato API, attualmente supportato solo dalla configurazione basata su file (anteprima).The required configuration is in a new API format, currently only supported by file-based configuration (preview). È necessario seguire la procedura descritta qui per usare un file di questo tipo.
Questa sezione descrive l'aggiornamento della configurazione per includere il nuovo IDP. Di seguito è riportato un esempio di configurazione.
Nell'oggetto
identityProvidersaggiungere unappleoggetto se non ne esiste già uno.Assegnare un oggetto a tale chiave con un
registrationoggetto al suo interno e, facoltativamente, unloginoggetto :"apple" : { "registration" : { "clientId": "<client ID>", "clientSecretSettingName": "APP_SETTING_CONTAINING_APPLE_CLIENT_SECRET" }, "login": { "scopes": [] } }Nell'oggetto
registration, impostare ilclientIdsull'ID client raccolto.Nell'oggetto
registrationimpostareclientSecretSettingNamesul nome dell'impostazione dell'applicazione in cui è stato archiviato il segreto client.Nell'oggetto è possibile scegliere di impostare la
loginmatrice in modo da includere un elenco di ambiti usati per l'autenticazionescopescon Apple, ad esempio nome e posta elettronica. Se gli ambiti sono configurati, vengono richiesti in modo esplicito nella schermata di consenso quando gli utenti accedono per la prima volta.
Dopo aver impostato questa configurazione, è possibile usare il provider Apple per l'autenticazione nell'app.
Una configurazione completa potrebbe essere simile all'esempio seguente, in cui l'impostazione APPLE_GENERATED_CLIENT_SECRET punta a un'impostazione dell'applicazione contenente un token JWT generato:
{
"platform": {
"enabled": true
},
"globalValidation": {
"redirectToProvider": "apple",
"unauthenticatedClientAction": "RedirectToLoginPage"
},
"identityProviders": {
"apple": {
"registration": {
"clientId": "com.contoso.example.client",
"clientSecretSettingName": "APPLE_GENERATED_CLIENT_SECRET"
},
"login": {
"scopes": []
}
}
},
"login": {
"tokenStore": {
"enabled": true
}
}
}