Megosztás a következőn keresztül:


Az App Service vagy az Azure Functions alkalmazás konfigurálása bejelentkezéshez az Apple-szolgáltatóval való bejelentkezéshez (előzetes verzió)

Ez a cikk bemutatja, hogyan konfigurálhatja a Azure-alkalmazás Szolgáltatást vagy az Azure Functionst, hogy hitelesítésszolgáltatóként használja a bejelentkezést az Apple-lel.

A cikkben ismertetett eljárás elvégzéséhez regisztrálnia kell az Apple fejlesztői programjában. Az Apple fejlesztői programba való regisztrációhoz lépjen a developer.apple.com/programs/enroll.

Figyelemfelhívás

Ha engedélyezi a bejelentkezést az Apple-lel, azzal letiltja az alkalmazás App Service-hitelesítés/engedélyezés funkciójának kezelését néhány ügyfélen keresztül, például az Azure Portalon, az Azure CLI-n és az Azure PowerShellen keresztül. A funkció egy új API-felületre támaszkodik, amely az előzetes verzióban még nem szerepel az összes felügyeleti felületen.

Alkalmazás létrehozása az Apple Fejlesztői portálon

Az Apple Fejlesztői portálon létre kell hoznia egy alkalmazásazonosítót és egy szolgáltatásazonosítót.

  1. Az Apple Fejlesztői portálon lépjen a Tanúsítványok, azonosítók és &profilok elemre.
  2. Az Azonosítók lapon válassza a (+) gombot.
  3. Az Új azonosító regisztrálása lapon válassza az Alkalmazásazonosítók lehetőséget, és válassza a Folytatás lehetőséget. (Az alkalmazásazonosítók egy vagy több szolgáltatásazonosítót tartalmaznak.) Új alkalmazásazonosító regisztrálása az Apple Fejlesztői portálon
  4. Az Alkalmazásazonosító regisztrálása lapon adjon meg egy leírást és egy csomagazonosítót, majd válassza a Bejelentkezés az Apple-szel lehetőséget a képességek listájából. Ezután válassza a Folytatás elemet. Jegyezze fel az alkalmazásazonosító-előtagot (csapatazonosítót) ebből a lépésből, és később szüksége lesz rá. Új alkalmazásazonosító konfigurálása az Apple Fejlesztői portálon
  5. Tekintse át az alkalmazásregisztrációs adatokat, és válassza a Regisztráció lehetőséget.
  6. Az Azonosítók lapon válassza a (+) gombot. Új szolgáltatásazonosító létrehozása az Apple Fejlesztői portálon
  7. Az Új azonosító regisztrálása lapon válassza a Szolgáltatások azonosítói lehetőséget, majd a Folytatás lehetőséget. Új szolgáltatásazonosító regisztrálása az Apple Fejlesztői portálon
  8. A Szolgáltatások azonosítójának regisztrálása lapon adjon meg egy leírást és egy azonosítót. Ez a leírás jelenik meg a felhasználó számára a hozzájárulási képernyőn. Az azonosító az Apple-szolgáltató app service-beli konfigurálásához használt ügyfélazonosító lesz. Ezután válassza a Konfigurálás lehetőséget. Leírás és azonosító megadása
  9. Az előugró ablakban állítsa az elsődleges alkalmazásazonosítót a korábban létrehozott alkalmazásazonosítóra. Adja meg az alkalmazás tartományát a tartomány szakaszban. A visszatérési URL-címhez használja az URL-címet <app-url>/.auth/login/apple/callback. Például: https://contoso.azurewebsites.net/.auth/login/apple/callback. Ezután válassza a Hozzáadás és mentés lehetőséget. A tartomány megadása és a regisztráció URL-címének visszaadása
  10. Tekintse át a szolgáltatásregisztrációs adatokat, és válassza a Mentés lehetőséget.

Az ügyfél titkos kódjának létrehozása

Az Apple megköveteli, hogy az alkalmazásfejlesztők létrehozzák és aláírják a JWT-jogkivonatot az ügyfél titkos kulcsának értékeként. A titkos kód létrehozásához először hozzon létre és töltsön le egy háromliptikus görbe titkos kulcsot az Apple Developer Portalról. Ezután ezzel a kulccsal aláírhat egy JWT-t egy adott hasznos adattal.

A titkos kulcs létrehozása és letöltése

  1. Az Apple Developer Portal Kulcsok lapján válassza a Kulcs létrehozása vagy a (+) gombot.
  2. Az Új kulcs regisztrálása lapon adjon nevet a kulcsnak, jelölje be a Bejelentkezés az Apple-szel jelölőnégyzetet, és válassza a Konfigurálás lehetőséget.
  3. A Kulcs konfigurálása lapon csatolja a kulcsot a korábban létrehozott elsődleges alkalmazásazonosítóhoz, és válassza a Mentés lehetőséget.
  4. Fejezze be a kulcs létrehozását az információk megerősítésével, majd a Folytatás gombra kattintva, majd tekintse át az információkat, és válassza a Regisztráció lehetőséget.
  5. A Kulcs letöltése lapon töltse le a kulcsot. A fájl (PKCS#8) fájlként .p8 lesz letöltve – a fájl tartalmával aláírhatja az ügyfél titkos JWT-kódját.

Az ügyfél titkos JWT-kódjának felépítése

Az Apple megköveteli, hogy egy JWT-jogkivonat alap64 kódolása legyen az ügyfél titkos kódja. A dekódolt JWT-jogkivonatnak az alábbi példához hasonlóan strukturált hasznos adatokkal kell rendelkeznie:

{
  "alg": "ES256",
  "kid": "URKEYID001",
}.{
  "sub": "com.yourcompany.app1",
  "nbf": 1560203207,
  "exp": 1560289607,
  "iss": "ABC123DEFG",
  "aud": "https://appleid.apple.com"
}.[Signature]
  • sub: Az Apple ügyfélazonosítója (a szolgáltatásazonosító is)
  • iss: Az Apple fejlesztői csapatazonosítója
  • aud: Az Apple megkapja a jogkivonatot, így ők a célközönség
  • exp: Legfeljebb hat hónappal az nbf után

A fenti hasznos adatok base64 kódolású verziója a következőképpen néz ki: eyJhbGciOiJFUzI1NiIsImtpZCI6IlVSS0VZSUQwMDEifQ.eyJzdWIiOiJjb20ueW91cmNvbXBhbnkuYXBwMSIsIm5iZiI6MTU2MDIwMzIwNywiZXhwIjoxNTYwMjg5NjA3LCJpc3MiOiJBQkMxMjNERUZHIiwiYXVkIjoiaHR0cHM6Ly9hcHBsZWlkLmFwcGxlLmNvbSJ9.ABSXELWuTbgqfrIUz7bLi6nXvkXAz5O8vt0jB2dSHTQTib1x1DSP4__4UrlKI-pdzNg1sgeocolPNTmDKazO8-BHAZCsdeeTNlgFEzBytIpMKFfVEQbEtGRkam5IeclUK7S9oOva4EK4jV4VmgDrr-LGWWO3TaAxAvy3_ZoKohvFFkVG

Megjegyzés: Az Apple nem fogadja el az ügyfél titkos JWT-jait a létrehozás (vagy nbf) dátumától számított hat hónapnál hosszabb lejárati dátummal. Ez azt jelenti, hogy legalább hathavonta el kell forgatnia az ügyfél titkos kódját.

A jogkivonatok létrehozásával és hitelesítésével kapcsolatos további információk az Apple fejlesztői dokumentációjában találhatók.

Az ügyfél titkos kódjának JWT aláírása

A korábban letöltött fájlt fogja használni .p8 az ügyfél titkos JWT aláírásához. Ez a fájl egy PCKS#8 fájl , amely PEM formátumban tartalmazza a titkos aláírási kulcsot. Számos kódtár képes létrehozni és aláírni a JWT-t.

A JWT-jogkivonatok létrehozásához és aláírásához különböző nyílt forráskódú kódtárak érhetők el online. A JWT-jogkivonatok létrehozásával kapcsolatos további információkért lásd: JSON Web Token (JWT). Az ügyfélkód létrehozásának egyik módja például a Microsoft.IdentityModel.Tokens NuGet-csomag importálása és az alább látható kis mennyiségű C#-kód futtatása.

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: Az Apple fejlesztői csapatazonosítója
  • clientId: Az Apple ügyfélazonosítója (a szolgáltatásazonosító is)
  • p8key: A PEM formátumkulcs – a kulcsot a fájl szövegszerkesztőben való megnyitásával .p8 és a sortörések közötti -----BEGIN PRIVATE KEY----- és -----END PRIVATE KEY----- anélküli másolással szerezheti be
  • keyId: A letöltött kulcs azonosítója

Ez a visszaadott jogkivonat az Apple-szolgáltató konfigurálásához használt titkos ügyfélkód értéke.

Fontos

Az ügyfél titkos kódja fontos biztonsági hitelesítő adat. Ezt a titkos kulcsot ne ossza meg senkivel, és ne ossza el egy ügyfélalkalmazásban.

Adja hozzá az ügyfélkulcsot alkalmazásbeállításként az alkalmazáshoz egy tetszőleges beállításnév használatával. Jegyezze fel ezt a nevet később.

Szolgáltatói adatok hozzáadása az alkalmazáshoz

Feljegyzés

A szükséges konfiguráció új API-formátumban van, jelenleg csak a fájlalapú konfiguráció (előzetes verzió) támogatja. Ehhez a fájlhoz kövesse az alábbi lépéseket.

Ez a szakasz végigvezeti a konfiguráció frissítésén, hogy belefoglalja az új identitásszolgáltatót. Egy példakonfiguráció következik.

  1. Az objektumon identityProviders belül adjon hozzá egy apple objektumot, ha még nem létezik.

  2. Rendeljen hozzá egy objektumot a kulcshoz egy registration benne lévő objektummal, és opcionálisan egy objektumot login :

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

    a. Az objektumon registration belül állítsa be a clientId gyűjtött ügyfél-azonosítót.

    b. Az objektumon registration belül állítsa be clientSecretSettingName annak az alkalmazásbeállításnak a nevét, amelyben az ügyfél titkos kulcsát tárolta.

    c. login Az objektumon belül beállíthatja, hogy a tömb tartalmazza az scopes Apple-hitelesítéskor használt hatókörök listáját, például a "név" és az "e-mail". Ha a hatókörök konfigurálva vannak, a rendszer explicit módon kéri őket a hozzájárulási képernyőn, amikor a felhasználók először jelentkeznek be.

Miután beállította ezt a konfigurációt, készen áll arra, hogy az Apple-szolgáltatót használja a hitelesítéshez az alkalmazásban.

A teljes konfiguráció az alábbi példához hasonlóan nézhet ki (ahol a APPLE_GENERATED_CLIENT_SECRET beállítás egy létrehozott JWT-t tartalmazó alkalmazásbeállításra mutat):

{
    "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
        }
    }     
}

Következő lépések