Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En este artículo se muestra cómo configurar Azure App Service o Azure Functions para usar Iniciar sesión con Apple como un proveedor de autenticación.
Para completar el procedimiento de este artículo, debe inscribirse en el programa para desarrolladores de Apple. Para inscribirse en el programa Apple Developer, vaya a developer.apple.com/programs/enroll.
Precaución
Al habilitar Iniciar sesión con Apple, se deshabilita la administración de la característica de autenticación y autorización de App Service para la aplicación a través de algunos clientes, como Azure Portal, la CLI de Azure y Azure PowerShell. La característica se basa en una nueva superficie de API, que, durante la versión preliminar, aún no se tiene en cuenta en todas las experiencias de administración.
Creación de una aplicación en el portal de Apple Developer
Cree un identificador de aplicación y un identificador de servicio en el portal para desarrolladores de Apple.
En el portal de Apple Developer, vaya a Certificates, Identifiers, & Profiles (Certificados, identificadores y perfiles).
Seleccione la pestaña Identifiers (Identificadores) y haga clic en el botón (+) .
En la página Register a New Identifier (Registrar un nuevo identificador), elija App IDs (Identificadores de aplicación) y seleccione Continue (Continuar). Los identificadores de aplicación incluyen uno o varios identificadores de servicio.
En la página Registrar un identificador de aplicación , proporcione una descripción y un identificador de lote.
En la lista de funcionalidades, seleccione Iniciar sesión con Apple y, a continuación, seleccione Continuar. Anote el prefijo de id. de aplicación (id. de equipo) de este paso. Lo necesitará más adelante.
Revise la información de registro de la aplicación y seleccione Register (Registrar).
De nuevo, en la pestaña Identifiers (Identificadores), seleccione el botón (+) .
En la página Register a New Identifier (Registrar un nuevo identificador), elija Service IDs (Identificadores de servicio) y seleccione Continue (Continuar).
En la página Register a Services ID (Registrar un identificador de servicios), proporcione una descripción y un identificador. A continuación, seleccione Configurar.
La descripción es lo que ve el usuario en la pantalla de consentimiento. El identificador es el ID de cliente que se utiliza para configurar el proveedor de Apple con tu servicio de aplicaciones.
En el cuadro de diálogo, establezca el identificador de aplicación principal en el identificador de aplicación que creó anteriormente. Especifique el dominio de la aplicación en la sección de dominio. Para la dirección URL de retorno, utilice la dirección URL
<app-url>/.auth/login/apple/callback. Por ejemplo,https://contoso.azurewebsites.net/.auth/login/apple/callback. Seleccione Agregar y Guardar.
Revise la información de registro del servicio y, a continuación, seleccione Guardar.
Generación del secreto de cliente
Apple requiere que los desarrolladores de aplicaciones creen y firmen un json Web Token (JWT) como valor de secreto de cliente. Para generar este secreto, primero genere y descargue una clave privada de curva elíptica desde el portal de Apple Developer. A continuación, use esa clave para firmar un JWT con una carga útil específica.
Creación y descarga de la clave privada
- En la pestaña Keys (Claves) del portal de Apple Developer, elija Create a key (Crear una clave) o seleccione el botón (+) .
- En la página Registrar una nueva clave , asigne un nombre a la clave, seleccione Iniciar sesión con Apple y seleccione Configurar.
- En la página Configurar clave, vincule la clave al identificador de aplicación principal que creó previamente y selecciona Guardar.
- Termine de crear la clave confirmando la información y seleccionando Continuar. A continuación, revise la información y seleccione Registrar.
- En la página Download Your Key (Descarga de la clave), descargue la clave. Se descarga como un
.p8archivo (PKCS#8). Use el contenido del archivo para firmar el secreto de cliente JWT.
Estructuración del JWT del secreto de cliente
Apple requiere que el secreto de cliente sea la codificación base64 de un JWT. El JWT descodificado debe tener una carga estructurada como en este ejemplo:
{
"alg": "ES256",
"kid": "URKEYID001",
}.{
"sub": "com.yourcompany.app1",
"nbf": 1560203207,
"exp": 1560289607,
"iss": "ABC123DEFG",
"aud": "https://appleid.apple.com"
}.[Signature]
- sub: El identificador de cliente de Apple, también el identificador de servicio
- iss: identificador del equipo de Apple Developer.
- aud: Apple está recibiendo el token, por lo que ellos son el público.
- exp: no más de seis meses después de nbf.
La versión codificada en base64 de esta carga tiene este aspecto:
eyJhbGciOiJFUzI1NiIsImtpZCI6IlVSS0VZSUQwMDEifQ.eyJzdWIiOiJjb20ueW91cmNvbXBhbnkuYXBwMSIsIm5iZiI6MTU2MDIwMzIwNywiZXhwIjoxNTYwMjg5NjA3LCJpc3MiOiJBQkMxMjNERUZHIiwiYXVkIjoiaHR0cHM6Ly9hcHBsZWlkLmFwcGxlLmNvbSJ9.ABSXELWuTbgqfrIUz7bLi6nXvkXAz5O8vt0jB2dSHTQTib1x1DSP4__4UrlKI-pdzNg1sgeocolPNTmDKazO8-BHAZCsdeeTNlgFEzBytIpMKFfVEQbEtGRkam5IeclUK7S9oOva4EK4jV4VmgDrr-LGWWO3TaAxAvy3_ZoKohvFFkVG
Nota
Apple no acepta JWT de secretos de cliente con una fecha de expiración superior a seis meses después de la fecha de creación o nbf. Debe rotar el secreto de cliente, como mínimo, cada seis meses.
Para obtener más información sobre cómo generar y validar tokens, consulte la documentación para desarrolladores de Apple.
Firma del JWT del secreto de cliente
Utiliza el .p8 archivo que descargaste anteriormente para firmar el JWT secreto del cliente. Este archivo es un archivo PKCS#8 que contiene la clave de firma privada en formato PEM. Hay muchas bibliotecas que pueden crear y firmar el JWT por usted.
Hay diferentes tipos de bibliotecas de código abierto disponibles en línea para crear y firmar JWT. Para obtener más información sobre cómo generar JWT, consulte JSON Web Token (JWT).
Por ejemplo, una forma de generar el secreto de cliente es importar el paquete NuGet Microsoft.IdentityModel.Tokens y ejecutar el código de C# que se muestra aquí:
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: identificador del equipo de Apple Developer.
- clientId: el identificador de cliente de Apple, también el identificador de servicio.
-
p8key: clave de formato PEM. Puede obtener la clave abriendo el
.p8archivo en un editor de texto y copiando todo entre-----BEGIN PRIVATE KEY-----y-----END PRIVATE KEY-----sin saltos de línea. - keyId: identificador de la clave descargada.
Este token devuelto es el valor de secreto de cliente que se usa para configurar el proveedor de Apple.
Importante
El secreto de cliente es una credencial de seguridad importante, No comparta este secreto con nadie ni distribúyalo en una aplicación cliente.
Agregue el secreto de cliente como una configuración de aplicación, con un nombre de configuración de su elección. Anote este nombre para usarlo más adelante.
Adición de información de un proveedor a su aplicación
Nota
La configuración necesaria está en un nuevo formato de API, que actualmente solo es compatible con la configuración basada en archivos (versión preliminar). Debe seguir los pasos que se indican aquí para usar este archivo.
En esta sección se describe cómo actualizar la configuración para incluir el nuevo IDP. La siguiente es una configuración de ejemplo.
En el
identityProvidersobjeto , agregue unappleobjeto si aún no existe uno.Asigne un objeto a esa clave con un objeto
registrationdentro y, opcionalmente, un objetologin:"apple" : { "registration" : { "clientId": "<client ID>", "clientSecretSettingName": "APP_SETTING_CONTAINING_APPLE_CLIENT_SECRET" }, "login": { "scopes": [] } }En el
registrationobjeto , establezca enclientIdel identificador de cliente que recopiló.En el objeto
registration, establezcaclientSecretSettingNameal nombre de la configuración de la aplicación donde almacenó el secreto del cliente.En el
objeto, puede elegir establecer el array para incluir una lista de ámbitos utilizados al autenticarse con Apple, como nombre ycorreo electrónico . Si los ámbitos están configurados, se solicitan explícitamente en la pantalla de consentimiento cuando los usuarios inician sesión por primera vez.
Después de establecer esta configuración, está listo para usar el proveedor de Apple para la autenticación en la aplicación.
Una configuración completa podría ser similar al ejemplo siguiente, donde el valor de APPLE_GENERATED_CLIENT_SECRET apunta a una configuración de aplicación que contiene un JWT generado:
{
"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
}
}
}