Konfigurace aplikace App Service nebo Azure Functions pro přihlášení pomocí poskytovatele Apple (Preview)
V tomto článku se dozvíte, jak nakonfigurovat službu Aplikace Azure Service nebo Azure Functions tak, aby jako poskytovatele ověřování používala přihlášení s Applem.
Abyste mohli dokončit postup v tomto článku, musíte být zaregistrovaní v programu Apple Developer Program. Pokud se chcete zaregistrovat do vývojářského programu Apple, přejděte na developer.apple.com/programs/enroll.
Upozornění
Povolením přihlášení pomocí Apple zakážete správu funkce ověřování nebo autorizace služby App Service pro vaši aplikaci prostřednictvím některých klientů, jako je Azure Portal, Azure CLI a Azure PowerShell. Tato funkce spoléhá na novou plochu rozhraní API, která ještě ve verzi Preview nepočítá ve všech prostředích pro správu.
Vytvoření aplikace na portálu Pro vývojáře Apple
Budete muset vytvořit ID aplikace a ID služby na portálu pro vývojáře Apple.
- Na portálu Pro vývojáře Apple přejděte na Certifikáty, Identifikátory a Profily.
- Na kartě Identifikátory vyberte tlačítko (+).
- Na stránce Zaregistrovat nový identifikátor zvolte ID aplikací a vyberte Pokračovat. (ID aplikací zahrnují jedno nebo více ID služby.)
- Na stránce Zaregistrovat ID aplikace zadejte popis a ID sady prostředků a v seznamu funkcí vyberte Přihlásit se pomocí Apple. Potom vyberte Pokračovat. Poznamenejte si předponu ID aplikace (ID týmu) z tohoto kroku, kterou budete potřebovat později.
- Zkontrolujte informace o registraci aplikace a vyberte Zaregistrovat.
- Znovu na kartě Identifikátory vyberte tlačítko (+).
- Na stránce Zaregistrovat nový identifikátor zvolte ID služeb a vyberte Pokračovat.
- Na stránce Registrace ID služeb zadejte popis a identifikátor. Popis je to, co se uživateli zobrazí na obrazovce souhlasu. Identifikátor bude ID vašeho klienta použitého při konfiguraci poskytovatele Apple s vaší službou App Service. Pak vyberte Konfigurovat.
- V automaticky otevíraných otevíraných oknech nastavte PRIMÁRNÍ ID aplikace na ID aplikace, které jste vytvořili dříve. V části Doména zadejte doménu vaší aplikace. Pro zpáteční adresu URL použijte adresu URL
<app-url>/.auth/login/apple/callback
. Napříkladhttps://contoso.azurewebsites.net/.auth/login/apple/callback
. Pak vyberte Přidat a uložit. - Zkontrolujte informace o registraci služby a vyberte Uložit.
Vygenerování tajného klíče klienta
Apple vyžaduje, aby vývojáři aplikací vytvořili a podepsali token JWT jako hodnotu tajného klíče klienta. Pokud chcete tento tajný kód vygenerovat, nejprve vygenerujte a stáhněte privátní klíč se třemi tečkami z portálu Pro vývojáře Apple. Pak tento klíč použijte k podepsání JWT s konkrétní datovou částí.
Vytvoření a stažení privátního klíče
- Na kartě Klíče na portálu Pro vývojáře Apple zvolte Vytvořit klíč nebo vyberte tlačítko (+).
- Na stránce Zaregistrovat nový klíč zadejte název klíče, zaškrtněte políčko vedle možnosti Přihlásit se pomocí Apple a vyberte Konfigurovat.
- Na stránce Konfigurovat klíč propojte klíč s primárním ID aplikace, které jste vytvořili dříve, a vyberte Uložit.
- Dokončete vytvoření klíče tak, že potvrdíte informace a vyberete Pokračovat a pak zkontrolujete informace a vyberete Zaregistrovat.
- Na stránce Stáhnout klíč stáhněte klíč. Stáhne se jako
.p8
soubor (PKCS#8) – obsah souboru použijete k podepsání tajného klíče klienta JWT.
Strukturování tajného klíče klienta JWT
Apple vyžaduje, aby tajný klíč klienta byl kódováním base64 tokenu JWT. Dekódovaný token JWT by měl mít datovou část strukturovanou jako v tomto příkladu:
{
"alg": "ES256",
"kid": "URKEYID001",
}.{
"sub": "com.yourcompany.app1",
"nbf": 1560203207,
"exp": 1560289607,
"iss": "ABC123DEFG",
"aud": "https://appleid.apple.com"
}.[Signature]
- sub: Apple Client ID (také ID služby)
- iss: Your Apple Developer Team ID
- aud: Apple přijímá token, takže jsou cílovou skupinou.
- exp: Ne více než šest měsíců po nbf
Verze výše uvedené datové části s kódováním base64 vypadá takto: eyJhbGciOiJFUzI1NiIsImtpZCI6IlVSS0VZSUQwMDEifQ.eyJzdWIiOiJjb20ueW91cmNvbXBhbnkuYXBwMSIsIm5iZiI6MTU2MDIwMzIwNywiZXhwIjoxNTYwMjg5NjA3LCJpc3MiOiJBQkMxMjNERUZHIiwiYXVkIjoiaHR0cHM6Ly9hcHBsZWlkLmFwcGxlLmNvbSJ9.ABSXELWuTbgqfrIUz7bLi6nXvkXAz5O8vt0jB2dSHTQTib1x1DSP4__4UrlKI-pdzNg1sgeocolPNTmDKazO8-BHAZCsdeeTNlgFEzBytIpMKFfVEQbEtGRkam5IeclUK7S9oOva4EK4jV4VmgDrr-LGWWO3TaAxAvy3_ZoKohvFFkVG
Poznámka: Apple nepřijímá tajné klíče klienta JWT s datem vypršení platnosti více než šest měsíců po datu vytvoření (nebo nbf). To znamená, že tajný klíč klienta budete muset obměňovat minimálně každých šest měsíců.
Další informace o generování a ověřování tokenů najdete v dokumentaci apple pro vývojáře.
Podepsání tajného klíče klienta JWT
Soubor, který jste stáhli dříve, použijete .p8
k podepsání tajného klíče klienta JWT. Tento soubor je soubor PCKS#8, který obsahuje privátní podpisový klíč ve formátu PEM. Existuje mnoho knihoven, které vám můžou vytvořit a podepsat JWT.
Pro vytváření a podepisování tokenů JWT jsou k dispozici online různé druhy opensourcových knihoven. Další informace o generování tokenů JWT najdete v tématu JSON Web Token (JWT). Jedním ze způsobů, jak vygenerovat tajný klíč klienta, je například importem balíčku NuGet Microsoft.IdentityModel.Tokens a spuštěním malého množství kódu jazyka C#, který je zobrazený níže.
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: ID týmu pro vývojáře Apple
- clientId: Apple Client ID (také ID služby)
- p8key: Klíč formátu PEM – klíč můžete získat otevřením
.p8
souboru v textovém editoru a zkopírováním všeho mezi-----BEGIN PRIVATE KEY-----
a-----END PRIVATE KEY-----
bez konců řádků. - keyId: ID staženého klíče
Vrácený token je hodnota tajného klíče klienta, kterou použijete ke konfiguraci poskytovatele Apple.
Důležité
Tajný klíč klienta je důležitými přihlašovacími údaji zabezpečení. Tento tajný kód nesdílejte s nikým ani ho nedistribuujte v rámci klientské aplikace.
Přidejte tajný klíč klienta jako nastavení aplikace pomocí názvu nastavení podle vašeho výběru. Poznamenejte si tento název pro pozdější použití.
Přidání informací o poskytovateli do aplikace
Poznámka:
Požadovaná konfigurace je v novém formátu rozhraní API, která je aktuálně podporována pouze konfigurací založenou na souborech (Preview). Pomocí tohoto souboru budete muset postupovat podle následujících kroků.
Tato část vás provede aktualizací konfigurace tak, aby zahrnovala nový protokol IDP. Příklad konfigurace následuje.
V rámci objektu
identityProviders
apple
přidejte objekt, pokud ještě neexistuje.Přiřaďte objekt k danému klíči s objektem
registration
v něm a volitelně objektlogin
:"apple" : { "registration" : { "clientId": "<client ID>", "clientSecretSettingName": "APP_SETTING_CONTAINING_APPLE_CLIENT_SECRET" }, "login": { "scopes": [] } }
a. V rámci objektu
registration
clientId
nastavte ID klienta, které jste shromáždili.b. V rámci objektu
registration
nastavteclientSecretSettingName
na název nastavení aplikace, do kterého jste uložili tajný klíč klienta.c. V rámci objektu
login
scopes
se můžete rozhodnout nastavit pole tak, aby zahrnovalo seznam oborů používaných při ověřování v Apple, například "jméno" a "e-mail". Pokud jsou obory nakonfigurované, budou se explicitně vyžadovat na obrazovce souhlasu, když se uživatelé poprvé přihlásí.
Jakmile je tato konfigurace nastavená, můžete v aplikaci použít svého poskytovatele Apple.
Úplná konfigurace může vypadat jako v následujícím příkladu (kde nastavení APPLE_GENERATED_CLIENT_SECRET odkazuje na nastavení aplikace obsahující vygenerovaný JWT):
{
"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
}
}
}
Další kroky
- Přehled ověřování nebo autorizace služby App Service
- Kurz: Ověřování a autorizace koncových uživatelů ve službě Aplikace Azure Service