Uw App Service- of Azure Functions-app configureren om u aan te melden met een Apple-provider (preview)

In dit artikel wordt beschreven hoe u Azure App Service of Azure Functions configureert om Aanmelden met Apple als verificatieprovider te gebruiken.

Als u de procedure in dit artikel wilt voltooien, moet u zijn ingeschreven bij het Apple-ontwikkelaarsprogramma. Als u zich wilt inschrijven voor het Apple-ontwikkelaarsprogramma, gaat u naar developer.apple.com/programs/enroll.

Waarschuwing

Als u Aanmelden met Apple inschakelt, wordt het beheer van de functie App Service verificatie/autorisatie voor uw toepassing uitgeschakeld via sommige clients, zoals de Azure Portal, Azure CLI en Azure PowerShell. De functie is afhankelijk van een nieuw API-oppervlak dat tijdens de preview nog niet in alle beheerervaringen wordt meegenomen.

Een toepassing maken in de Apple Developer-portal

U moet een app-id en een service-id maken in de Apple Developer-portal.

  1. Ga in de Apple Developer-portal naar Certificaten, Id's, & Profielen.
  2. Selecteer op het tabblad Id's de knop (+).
  3. Kies op de pagina Een nieuwe id registrerende optie App-id's en selecteer Doorgaan. (App-id's bevatten een of meer service-id's.) Een nieuwe app-id registreren in de Apple Developer Portal
  4. 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 uw app-id-voorvoegsel (team-id) uit deze stap. U hebt deze later nodig. Een nieuwe app-id configureren in de Apple Developer Portal
  5. Controleer de app-registratiegegevens en selecteer Registreren.
  6. Selecteer nogmaals op het tabblad Id's de knop (+). Een nieuwe service-id maken in de Apple Developer Portal
  7. Kies op de pagina Een nieuwe id registrerende optie Services-id's en selecteer Doorgaan. Een nieuwe service-id registreren in de Apple Developer Portal
  8. Geef op de pagina Een service-id registreren een beschrijving en een id op. De beschrijving is wat aan de gebruiker wordt weergegeven 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. Een beschrijving en een id opgeven
  9. 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 voor de retour-URL de URL <app-url>/.auth/login/apple/callback. Bijvoorbeeld https://contoso.azurewebsites.net/.auth/login/apple/callback. Selecteer vervolgens Toevoegen en Opslaan. Het domein en de retour-URL voor de registratie opgeven
  10. 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, moet u eerst een persoonlijke sleutel voor elliptische curven genereren en downloaden vanuit de Apple-ontwikkelaarsportal. Gebruik vervolgens die sleutel om een JWT te ondertekenen met een specifieke nettolading.

De persoonlijke sleutel maken en downloaden

  1. Kies op het tabblad Sleutels in de Apple Developer-portal de optie Een sleutel maken of selecteer de knop (+).
  2. Op de pagina Een nieuwe sleutel registreren geeft u de sleutel een naam, schakelt u het selectievakje naast Aanmelden met Apple in en selecteert u Configureren.
  3. Koppel op de pagina Sleutel configureren de sleutel aan de primaire app-id die u eerder hebt gemaakt en selecteer Opslaan.
  4. Voltooi het maken van de sleutel door de gegevens te bevestigen, Doorgaan te selecteren en vervolgens de informatie te controleren en Registreren te selecteren.
  5. Download de sleutel op de pagina Uw sleutel downloaden. Het wordt gedownload als een .p8 (PKCS#8)-bestand. U gebruikt de bestandsinhoud om de JWT van uw clientgeheim 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 zij zijn de doelgroep
  • exp: niet meer dan zes maanden na nbf

De met base64 gecodeerde versie van de bovenstaande nettolading ziet er als volgt uit: eyJhbGciOiJFUzI1NiIsImtpZCI6IlVSS0VZSUQwMDEifQ.eyJzdWIiOiJjb20ueW91cmNvbXBhbnkuYXBwMSIsIm5iZiI6MTU2MDIwMzIwNywiZXhwIjoxNTYwMjg5NjA3LCJpc3MiOiJBQkMxMjNERUZHIiwiYXVkIjoiaHR0cHM6Ly9hcHBsZWlkLmFwcGxlLmNvbSJ9.ABSXELWuTbgqfrIUz7bLi6nXvkXAz5O8vt0jB2dSHTQTib1x1DSP4__4UrlKI-pdzNg1sgeocolPNTmDKazO8-BHAZCsdeeTNlgFEzBytIpMKFfVEQbEtGRkam5IeclUK7S9oOva4EK4jV4VmgDrr-LGWWO3TaAxAvy3_ZoKohvFFkVG

Opmerking: Apple accepteert geen JWT's van clientgeheimen met een vervaldatum langer dan zes maanden na de datum van het maken (of nbf). Dit 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 documentatie voor ontwikkelaars 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 bijvoorbeeld het clientgeheim te genereren, is door het Microsoft te importeren. IdentityModel.Tokens NuGet-pakket en het uitvoeren van een kleine hoeveelheid C#-code 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 sleutel in PEM-indeling: u kunt de sleutel verkrijgen door het .p8 bestand te openen in een teksteditor en alles tussen -----BEGIN PRIVATE KEY----- en -----END PRIVATE KEY----- zonder regeleinden te kopiëren
  • keyId: de id van de gedownloade sleutel

Dit geretourneerde token 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 binnen een clienttoepassing.

Voeg het clientgeheim toe als een toepassingsinstelling voor de app, met behulp van een instellingsnaam van uw keuze. Noteer deze naam voor later gebruik.

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 met uw nieuwe IDP. Hierna volgt een voorbeeldconfiguratie.

  1. Voeg binnen het identityProviders -object een apple -object toe als dit nog niet bestaat.

  2. Wijs een object toe aan die sleutel met daarin een registration object en eventueel een login -object:

    "apple" : {
       "registration" : {
            "clientId": "<client ID>",
            "clientSecretSettingName": "APP_SETTING_CONTAINING_APPLE_CLIENT_SECRET" 
        },
       "login": {
             "scopes": []
       }
    }
    

    a. Stel in het registration -object de clientId in op de client-id die u hebt verzameld.

    b. Stel clientSecretSettingName in het registration -object in op de naam van de toepassingsinstelling waarin u het clientgeheim hebt opgeslagen.

    c. In het login object kunt u ervoor kiezen om de scopes matrix zo in te stellen dat deze een lijst met bereiken bevat 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 de eerste keer 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
        }
    }     
}

Volgende stappen