Konfigurera din App Service- eller Azure Functions-app för att logga in med en inloggning med Apple-providern (förhandsversion)
Den här artikeln visar hur du konfigurerar Azure App Service eller Azure Functions för att använda Logga in med Apple som autentiseringsprovider.
Om du vill slutföra proceduren i den här artikeln måste du ha registrerat dig i Apple Developer-programmet. Om du vill registrera dig i Apples utvecklarprogram går du till developer.apple.com/programs/enroll.
Varning
Om du aktiverar Inloggning med Apple inaktiveras hanteringen av apptjänstautentiserings-/auktoriseringsfunktionen för ditt program via vissa klienter, till exempel Azure-portalen, Azure CLI och Azure PowerShell. Funktionen förlitar sig på en ny API-yta som under förhandsversionen ännu inte har redovisats i alla hanteringsupplevelser.
Skapa ett program i Apple Developer-portalen
Du måste skapa ett app-ID och ett tjänst-ID i Apple Developer-portalen.
- Gå till Certifikat, identifierare och profiler i Apple Developer-portalen.
- På fliken Identifierare väljer du knappen (+).
- På sidan Registrera en ny identifierare väljer du App-ID: n och väljer Fortsätt. (App-ID:t innehåller ett eller flera tjänst-ID:t.)
- På sidan Registrera ett app-ID anger du en beskrivning och ett paket-ID och väljer Logga in med Apple i listan över funktioner. Välj sedan Fortsätt. Anteckna ditt app-ID-prefix (team-ID) från det här steget. Du behöver det senare.
- Granska appregistreringsinformationen och välj Registrera.
- På fliken Identifierare väljer du återigen knappen (+).
- På sidan Registrera en ny identifierare väljer du Tjänste-ID: n och väljer Fortsätt.
- På sidan Registrera ett tjänst-ID anger du en beskrivning och en identifierare. Beskrivningen är vad som visas för användaren på medgivandeskärmen. Identifieraren är ditt klient-ID som används för att konfigurera Apple-providern med din apptjänst. Välj sedan Konfigurera.
- I popup-fönstret anger du det primära app-ID:t till det app-ID som du skapade tidigare. Ange programmets domän i domänavsnittet. Använd URL:en för retur-URL:en
<app-url>/.auth/login/apple/callback
. Exempel:https://contoso.azurewebsites.net/.auth/login/apple/callback
Välj sedan Lägg till och Spara. - Granska informationen om tjänstregistrering och välj Spara.
Generera klienthemligheten
Apple kräver att apputvecklare skapar och signerar en JWT-token som klienthemlighetsvärde. Generera den här hemligheten genom att först generera och ladda ned en privat nyckel i en elliptisk kurva från Apple Developer-portalen. Använd sedan den nyckeln för att signera en JWT med en specifik nyttolast.
Skapa och ladda ned den privata nyckeln
- På fliken Nycklar i Apple Developer-portalen väljer du Skapa en nyckel eller väljer knappen (+).
- På sidan Registrera en ny nyckel ger du nyckeln ett namn, markerar kryssrutan bredvid Logga in med Apple och väljer Konfigurera.
- På sidan Konfigurera nyckel länkar du nyckeln till det primära app-ID som du skapade tidigare och väljer Spara.
- Slutför skapandet av nyckeln genom att bekräfta informationen och välja Fortsätt och sedan granska informationen och välja Registrera.
- På sidan Ladda ned din nyckel laddar du ned nyckeln. Den laddas ned som en
.p8
(PKCS#8)-fil – du använder filinnehållet för att signera din klienthemliga JWT.
Strukturera klienthemlighetens JWT
Apple kräver att klienthemligheten är base64-kodning för en JWT-token. Den avkodade JWT-token bör ha en nyttolast strukturerad som det här exemplet:
{
"alg": "ES256",
"kid": "URKEYID001",
}.{
"sub": "com.yourcompany.app1",
"nbf": 1560203207,
"exp": 1560289607,
"iss": "ABC123DEFG",
"aud": "https://appleid.apple.com"
}.[Signature]
- sub: Apples klient-ID (även tjänst-ID)
- iss: Ditt Apple Developer Team-ID
- aud: Apple tar emot token, så de är målgruppen
- exp: Högst sex månader efter nbf
Den base64-kodade versionen av nyttolasten ovan ser ut så här: eyJhbGciOiJFUzI1NiIsImtpZCI6IlVSS0VZSUQwMDEifQ.eyJzdWIiOiJjb20ueW91cmNvbXBhbnkuYXBwMSIsIm5iZiI6MTU2MDIwMzIwNywiZXhwIjoxNTYwMjg5NjA3LCJpc3MiOiJBQkMxMjNERUZHIiwiYXVkIjoiaHR0cHM6Ly9hcHBsZWlkLmFwcGxlLmNvbSJ9.ABSXELWuTbgqfrIUz7bLi6nXvkXAz5O8vt0jB2dSHTQTib1x1DSP4__4UrlKI-pdzNg1sgeocolPNTmDKazO8-BHAZCsdeeTNlgFEzBytIpMKFfVEQbEtGRkam5IeclUK7S9oOva4EK4jV4VmgDrr-LGWWO3TaAxAvy3_ZoKohvFFkVG
Obs! Apple accepterar inte klienthemliga JWT:er med ett förfallodatum mer än sex månader efter skapandedatumet (eller nbf). Det innebär att du måste rotera din klienthemlighet, minst var sjätte månad.
Mer information om hur du genererar och validerar token finns i Apples utvecklardokumentation.
Signera klienthemlighetens JWT
Du använder filen .p8
som du laddade ned tidigare för att signera klienthemlighetenS JWT. Den här filen är en PCKS#8-fil som innehåller den privata signeringsnyckeln i PEM-format. Det finns många bibliotek som kan skapa och signera JWT åt dig.
Det finns olika typer av bibliotek med öppen källkod tillgängliga online för att skapa och signera JWT-token. Mer information om hur du genererar JWT-token finns i JSON Web Token (JWT). Ett sätt att generera klienthemligheten är till exempel genom att importera NuGet-paketet Microsoft.IdentityModel.Tokens och köra en liten mängd C#-kod som visas nedan.
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: Ditt Apple Developer Team-ID
- clientId: Apples klient-ID (även tjänst-ID)
- p8key: PEM-formatnyckeln – du kan hämta nyckeln genom att öppna
.p8
filen i en textredigerare och kopiera allt mellan-----BEGIN PRIVATE KEY-----
och-----END PRIVATE KEY-----
utan radbrytningar - keyId: ID för den nedladdade nyckeln
Den här token som returneras är det klienthemlighetsvärde som du använder för att konfigurera Apple-providern.
Viktigt!
Klienthemligheten är en viktig säkerhetsautentiseringsuppgift. Dela inte den här hemligheten med någon eller distribuera den i ett klientprogram.
Lägg till klienthemligheten som en programinställning för appen med ett valfritt inställningsnamn. Anteckna det här namnet för senare.
Lägga till providerinformation i ditt program
Kommentar
Den nödvändiga konfigurationen är i ett nytt API-format, som för närvarande endast stöds av filbaserad konfiguration (förhandsversion). Du måste följa stegen nedan med hjälp av en sådan fil.
Det här avsnittet beskriver hur du uppdaterar konfigurationen för att inkludera din nya IDP. En exempelkonfiguration följer.
identityProviders
Lägg till ettapple
objekt i objektet om det inte redan finns.Tilldela ett objekt till den nyckeln med ett
registration
objekt i den, och eventuellt ettlogin
objekt:"apple" : { "registration" : { "clientId": "<client ID>", "clientSecretSettingName": "APP_SETTING_CONTAINING_APPLE_CLIENT_SECRET" }, "login": { "scopes": [] } }
a.
registration
I -objektet anger duclientId
till det klient-ID som du samlade in.b.
registration
I objektet anger duclientSecretSettingName
namnet på den programinställning där du lagrade klienthemligheten.c. I objektet kan du välja att ange matrisen så att den
scopes
innehåller en lista över omfång som används när du autentiserarlogin
med Apple, till exempel "namn" och "e-post". Om omfång konfigureras begärs de uttryckligen på medgivandeskärmen när användarna loggar in för första gången.
När den här konfigurationen har angetts är du redo att använda Apple-providern för autentisering i din app.
En fullständig konfiguration kan se ut som i följande exempel (där inställningen APPLE_GENERATED_CLIENT_SECRET pekar på en programinställning som innehåller en genererad 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
}
}
}
Nästa steg
- Översikt över App Service-autentisering/auktorisering.
- Självstudie: Autentisera och auktorisera användare från slutpunkt till slutpunkt i Azure App Service