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.
- Az Apple Fejlesztői portálon lépjen a Tanúsítványok, azonosítók és &profilok elemre.
- Az Azonosítók lapon válassza a (+) gombot.
- 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.)
- 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á.
- Tekintse át az alkalmazásregisztrációs adatokat, és válassza a Regisztráció lehetőséget.
- Az Azonosítók lapon válassza a (+) gombot.
- 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.
- 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.
- 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. - 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
- Az Apple Developer Portal Kulcsok lapján válassza a Kulcs létrehozása vagy a (+) gombot.
- 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.
- 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.
- 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.
- 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.
Az objektumon
identityProviders
belül adjon hozzá egyapple
objektumot, ha még nem létezik.Rendeljen hozzá egy objektumot a kulcshoz egy
registration
benne lévő objektummal, és opcionálisan egy objektumotlogin
:"apple" : { "registration" : { "clientId": "<client ID>", "clientSecretSettingName": "APP_SETTING_CONTAINING_APPLE_CLIENT_SECRET" }, "login": { "scopes": [] } }
a. Az objektumon
registration
belül állítsa be aclientId
gyűjtött ügyfél-azonosítót.b. Az objektumon
registration
belül állítsa beclientSecretSettingName
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 azscopes
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
}
}
}