Uw App Service- of Azure Functions-app configureren om u aan te melden met behulp van een aanmelding met een Apple-provider (preview)
In dit artikel leest u hoe u Azure-app Service of Azure Functions configureert voor het gebruik van aanmelden met Apple als verificatieprovider.
Als u de procedure in dit artikel wilt voltooien, moet u zijn ingeschreven in het Apple-ontwikkelaarsprogramma. Als u zich wilt inschrijven bij het Apple-ontwikkelaarsprogramma, gaat u naar developer.apple.com/programs/enroll.
Let op
Als u Aanmelden met Apple inschakelt, wordt het beheer van de functie App Service-verificatie/-autorisatie voor uw toepassing via sommige clients uitgeschakeld, zoals Azure Portal, Azure CLI en Azure PowerShell. De functie is afhankelijk van een nieuw API-oppervlak dat tijdens de preview nog niet is verantwoordelijk voor alle beheerervaringen.
Een toepassing maken in de Apple Developer-portal
U moet een app-id en een service-id maken in de Apple Developer-portal.
- Ga in de Apple Developer-portal naar Certificaten, id's en profielen.
- Selecteer op het tabblad Id's de knop (+).
- Kies op de pagina Een nieuwe id registreren de app-id's en selecteer Doorgaan. (App-id's bevatten een of meer service-id's.)
- Geef op de pagina Een app-id registreren een beschrijving en een bundel-id op en selecteer Aanmelden met Apple in de lijst met mogelijkheden. Selecteer vervolgens Doorgaan. Noteer het voorvoegsel voor uw app-id (team-id) uit deze stap. U hebt dit later nodig.
- Controleer de registratiegegevens van de app en selecteer Registreren.
- Selecteer nogmaals op het tabblad Id's de knop (+).
- Kies op de pagina Een nieuwe id registreren de services-id's en selecteer Doorgaan.
- Geef op de pagina Een services-id registreren een beschrijving en een id op. De beschrijving is wat wordt weergegeven aan de gebruiker op het toestemmingsscherm. De id is uw client-id die wordt gebruikt bij het configureren van de Apple-provider met uw app-service. Selecteer vervolgens Configureren.
- Stel in het pop-upvenster de primaire app-id in op de app-id die u eerder hebt gemaakt. Geef het domein van uw toepassing op in de domeinsectie. Gebruik de URL
<app-url>/.auth/login/apple/callback
voor de retour-URL. Bijvoorbeeld:https://contoso.azurewebsites.net/.auth/login/apple/callback
. Selecteer Vervolgens Toevoegen en Opslaan. - Controleer de serviceregistratiegegevens en selecteer Opslaan.
Het clientgeheim genereren
Apple vereist dat app-ontwikkelaars een JWT-token maken en ondertekenen als de waarde van het clientgeheim. Als u dit geheim wilt genereren, genereert en downloadt u eerst een persoonlijke sleutel voor een elliptische curve vanuit de Apple Developer-portal. Gebruik die sleutel vervolgens om een JWT te ondertekenen met een specifieke nettolading.
De persoonlijke sleutel maken en downloaden
- Kies op het tabblad Sleutels in de Apple Developer-portal een sleutel maken of selecteer de knop (+).
- Schakel op de pagina Een nieuwe sleutel registreren de sleutel een naam in, schakel het selectievakje in naast Aanmelden met Apple en selecteer Configureren.
- Koppel de sleutel op de pagina Sleutel configureren aan de primaire app-id die u eerder hebt gemaakt en selecteer Opslaan.
- Voltooi het maken van de sleutel door de informatie te bevestigen en Doorgaan te selecteren en vervolgens de informatie te controleren en Registreren te selecteren.
- Download de sleutel op de pagina Uw sleutel downloaden. Het wordt gedownload als een
.p8
(PKCS#8)-bestand. U gebruikt de bestandsinhoud om uw clientgeheim JWT te ondertekenen.
De JWT van het clientgeheim structuren
Apple vereist dat het clientgeheim de base64-codering van een JWT-token is. Het gedecodeerde JWT-token moet een nettolading hebben die is gestructureerd zoals in dit voorbeeld:
{
"alg": "ES256",
"kid": "URKEYID001",
}.{
"sub": "com.yourcompany.app1",
"nbf": 1560203207,
"exp": 1560289607,
"iss": "ABC123DEFG",
"aud": "https://appleid.apple.com"
}.[Signature]
- sub: De Apple-client-id (ook de service-id)
- iss: uw Apple Developer Team ID
- aud: Apple ontvangt het token, dus ze zijn het publiek
- exp: niet meer dan zes maanden na nbf
De base64-gecodeerde versie van de bovenstaande nettolading ziet er als volgt uit: eyJhbGciOiJFUzI1NiIsImtpZCI6IlVSS0VZSUQwMDEifQ.eyJzdWIiOiJjb20ueW91cmNvbXBhbnkuYXBwMSIsIm5iZiI6MTU2MDIwMzIwNywiZXhwIjoxNTYwMjg5NjA3LCJpc3MiOiJBQkMxMjNERUZHIiwiYXVkIjoiaHR0cHM6Ly9hcHBsZWlkLmFwcGxlLmNvbSJ9.ABSXELWuTbgqfrIUz7bLi6nXvkXAz5O8vt0jB2dSHTQTib1x1DSP4__4UrlKI-pdzNg1sgeocolPNTmDKazO8-BHAZCsdeeTNlgFEzBytIpMKFfVEQbEtGRkam5IeclUK7S9oOva4EK4jV4VmgDrr-LGWWO3TaAxAvy3_ZoKohvFFkVG
Opmerking: Apple accepteert geen clientgeheim-JWT's met een vervaldatum meer dan zes maanden na de aanmaakdatum (of nbf). Dat betekent dat u uw clientgeheim minimaal om de zes maanden moet roteren.
Meer informatie over het genereren en valideren van tokens vindt u in de ontwikkelaarsdocumentatie van Apple.
De JWT van het clientgeheim ondertekenen
U gebruikt het .p8
bestand dat u eerder hebt gedownload om de JWT van het clientgeheim te ondertekenen. Dit bestand is een PCKS#8-bestand dat de persoonlijke ondertekeningssleutel in PEM-indeling bevat. Er zijn veel bibliotheken die de JWT voor u kunnen maken en ondertekenen.
Er zijn verschillende soorten opensource-bibliotheken online beschikbaar voor het maken en ondertekenen van JWT-tokens. Zie JSON Web Token (JWT) voor meer informatie over het genereren van JWT-tokens. Een manier om het clientgeheim te genereren is bijvoorbeeld door het NuGet-pakket Microsoft.IdentityModel.Tokens te importeren en een kleine hoeveelheid C#-code uit te voeren die hieronder wordt weergegeven.
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: uw Apple Developer Team ID
- clientId: De Apple-client-id (ook de service-id)
- p8key: De PEM-indelingssleutel - u kunt de sleutel verkrijgen door het
.p8
bestand in een teksteditor te openen en alles tussen-----BEGIN PRIVATE KEY-----
en-----END PRIVATE KEY-----
zonder regeleinden te kopiëren - keyId: de id van de gedownloade sleutel
Dit token dat wordt geretourneerd, is de waarde van het clientgeheim die u gebruikt om de Apple-provider te configureren.
Belangrijk
Het clientgeheim is een belangrijke beveiligingsreferentie. Deel dit geheim niet met iemand of distribueer het in een clienttoepassing.
Voeg het clientgeheim toe als toepassingsinstelling voor de app, met behulp van een instellingsnaam van uw keuze. Noteer deze naam voor later.
Providergegevens toevoegen aan uw toepassing
Notitie
De vereiste configuratie heeft een nieuwe API-indeling, die momenteel alleen wordt ondersteund door configuratie op basis van bestanden (preview). U moet de onderstaande stappen volgen met behulp van een dergelijk bestand.
In deze sectie wordt u begeleid bij het bijwerken van de configuratie om uw nieuwe IDP op te nemen. Een voorbeeldconfiguratie volgt.
Voeg binnen het
identityProviders
object eenapple
object toe als deze nog niet bestaat.Wijs een object toe aan die sleutel met een
registration
object erin en eventueel eenlogin
object:"apple" : { "registration" : { "clientId": "<client ID>", "clientSecretSettingName": "APP_SETTING_CONTAINING_APPLE_CLIENT_SECRET" }, "login": { "scopes": [] } }
a. Stel in het
registration
object declientId
client-id in die u hebt verzameld.b. Stel in het
registration
objectclientSecretSettingName
in op de naam van de toepassingsinstelling waar u het clientgeheim hebt opgeslagen.c. In het
login
object kunt u ervoor kiezen om descopes
matrix in te stellen op een lijst met bereiken die worden gebruikt bij het verifiëren met Apple, zoals 'naam' en 'e-mail'. Als bereiken zijn geconfigureerd, worden ze expliciet aangevraagd op het toestemmingsscherm wanneer gebruikers zich voor het eerst aanmelden.
Zodra deze configuratie is ingesteld, kunt u uw Apple-provider gebruiken voor verificatie in uw app.
Een volledige configuratie kan eruitzien als in het volgende voorbeeld (waarbij de APPLE_GENERATED_CLIENT_SECRET instelling verwijst naar een toepassingsinstelling die een gegenereerde JWT bevat):
{
"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
}
}
}