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.

  1. Na portálu Pro vývojáře Apple přejděte na Certifikáty, Identifikátory a Profily.
  2. Na kartě Identifikátory vyberte tlačítko (+).
  3. Na stránce Zaregistrovat nový identifikátor zvolte ID aplikací a vyberte Pokračovat. (ID aplikací zahrnují jedno nebo více ID služby.) Registrace nového identifikátoru aplikace na portálu pro vývojáře Apple
  4. 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. Konfigurace nového identifikátoru aplikace na portálu pro vývojáře Apple
  5. Zkontrolujte informace o registraci aplikace a vyberte Zaregistrovat.
  6. Znovu na kartě Identifikátory vyberte tlačítko (+). Vytvoření nového identifikátoru služby na portálu pro vývojáře Apple
  7. Na stránce Zaregistrovat nový identifikátor zvolte ID služeb a vyberte Pokračovat. Registrace nového identifikátoru služby na portálu pro vývojáře Apple
  8. 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. Zadání popisu a identifikátoru
  9. 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říklad https://contoso.azurewebsites.net/.auth/login/apple/callback. Pak vyberte Přidat a uložit. Zadání domény a návratové adresy URL pro registraci
  10. 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

  1. Na kartě Klíče na portálu Pro vývojáře Apple zvolte Vytvořit klíč nebo vyberte tlačítko (+).
  2. 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.
  3. Na stránce Konfigurovat klíč propojte klíč s primárním ID aplikace, které jste vytvořili dříve, a vyberte Uložit.
  4. Dokončete vytvoření klíče tak, že potvrdíte informace a vyberete Pokračovat a pak zkontrolujete informace a vyberete Zaregistrovat.
  5. 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.

  1. V rámci objektu identityProviders apple přidejte objekt, pokud ještě neexistuje.

  2. Přiřaďte objekt k danému klíči s objektem registration v něm a volitelně objekt login :

    "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 nastavte clientSecretSettingName 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