Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
- Microsoft Entra
- GitHub
- X
- OpenID Connect-provider
- Aanmelden met Apple (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 zich inschrijven voor het Apple-ontwikkelaarsprogramma. Als u zich wilt inschrijven bij het Apple-ontwikkelaarsprogramma, gaat u naar developer.apple.com/programs/enroll.
Caution
Als u 'Sign in with Apple' inschakelt, wordt het beheer van de App Service-verificatie- en autorisatiefunctie voor uw toepassing uitgeschakeld via sommige clients zoals de Azure portal, Azure CLI en Azure PowerShell. De functie is afhankelijk van een nieuwe API-interface, die tijdens de preview nog niet is meegenomen in alle beheerervaringen.
Een toepassing maken in de Apple Developer-portal
Maak een app-id en een service-id 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 registrerende 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.
Selecteer Aanmelden met Apple in de lijst met mogelijkheden en selecteer Vervolgens Doorgaan. Noteer het voorvoegsel van uw app-id (team-id) in deze stap. U hebt het 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 registrerenService-ID's en selecteer Doorgaan.
Geef op de pagina Een Services-ID registreren een beschrijving en een id op. Selecteer vervolgens Configureren.
De beschrijving is wat de gebruiker ziet op het toestemmingsscherm. De identifier is uw client-ID die wordt gebruikt bij het configureren van de Apple-provider met uw app-service.
Stel in het dialoogvenster 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/callbackvoor 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 JSON-webtoken (JWT) 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 belasting.
De persoonlijke sleutel maken en downloaden
- Kies op het tabblad Sleutels in de Apple Developer-portal een sleutel maken of selecteer de knop (+).
- Geef op de pagina Een nieuwe sleutel registreren de sleutel een naam, selecteer 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. Controleer vervolgens de informatie en selecteer Registreren.
- Op de pagina Uw sleutel downloaden, download de sleutel. Het wordt gedownload als een
.p8(PKCS#8)-bestand. U gebruikt de bestandsinhoud om uw clientgeheim JWT te ondertekenen.
Het client secret JWT structureren
Apple vereist dat het clientgeheim de base64-codering van een JWT is. De gedecodeerde JWT 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 deze nettolading ziet er als volgt uit:
eyJhbGciOiJFUzI1NiIsImtpZCI6IlVSS0VZSUQwMDEifQ.eyJzdWIiOiJjb20ueW91cmNvbXBhbnkuYXBwMSIsIm5iZiI6MTU2MDIwMzIwNywiZXhwIjoxNTYwMjg5NjA3LCJpc3MiOiJBQkMxMjNERUZHIiwiYXVkIjoiaHR0cHM6Ly9hcHBsZWlkLmFwcGxlLmNvbSJ9.ABSXELWuTbgqfrIUz7bLi6nXvkXAz5O8vt0jB2dSHTQTib1x1DSP4__4UrlKI-pdzNg1sgeocolPNTmDKazO8-BHAZCsdeeTNlgFEzBytIpMKFfVEQbEtGRkam5IeclUK7S9oOva4EK4jV4VmgDrr-LGWWO3TaAxAvy3_ZoKohvFFkVG
Notitie
Apple accepteert geen clientgeheim-JWT's met een vervaldatum meer dan zes maanden na het maken, of nbf, datum. U moet uw clientgeheim minimaal om de zes maanden roteren.
Zie de ontwikkelaarsdocumentatie van Apple voor meer informatie over het genereren en valideren van tokens.
Het clientgeheim-JWT ondertekenen
U gebruikt het .p8 bestand dat u eerder hebt gedownload om de JWT van het clientgeheim te ondertekenen. Dit bestand is een PKCS#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's. Zie JSON Web Token (JWT) voor meer informatie over het genereren van JWT's.
Een manier om het clientgeheim te genereren, is bijvoorbeeld door het NuGet-pakket Microsoft.IdentityModel.Tokens te importeren en de C#-code uit te voeren die hier 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 sleutel in het PEM-formaat. U kunt de sleutel verkrijgen door het
.p8bestand te openen in een teksteditor en alles te kopiëren tussen-----BEGIN PRIVATE KEY-----en-----END PRIVATE KEY-----zonder regeleinden. - keyId: de id van de gedownloade sleutel
Dit token dat wordt geretourneerd, is de clientgeheimwaarde 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 stappen hier volgen om een dergelijk bestand te kunnen gebruiken.
In deze sectie wordt beschreven hoe u de configuratie bijwerkt om uw nieuwe IDP op te nemen. Een voorbeeldconfiguratie volgt.
Voeg in het
identityProvidersobject eenappleobject toe als er nog geen object bestaat.Wijs een object toe aan die sleutel met een
registrationobject erin en eventueel eenloginobject:"apple" : { "registration" : { "clientId": "<client ID>", "clientSecretSettingName": "APP_SETTING_CONTAINING_APPLE_CLIENT_SECRET" }, "login": { "scopes": [] } }Stel in het
registrationobject declientIdclient-id in die u hebt verzameld.Stel
registrationin hetclientSecretSettingNameobject in op de naam van de toepassingsinstelling waar u het clientgeheim hebt opgeslagen.In het
loginobject kunt u ervoor kiezen om descopesarray in te stellen op een lijst met bereiken die worden gebruikt bij het authenticeren met Apple, zoals naam en e-mail. Als scopes zijn geconfigureerd, vragen we ze expliciet aan op het toestemmingsscherm wanneer gebruikers zich voor het eerst aanmelden.
Nadat u deze configuratie hebt 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
}
}
}
Verwante inhoud
- Verificatie en autorisatie in Azure-app Service en Azure Functions
- Zelfstudie: Gebruikers van begin tot eind verifiëren en autoriseren in Azure App Service