Configurar o Serviço de Aplicativo ou o aplicativo Azure Functions para entrar usando um Entrar com o provedor da Apple (Visualização)
Este artigo mostra como configurar o Serviço de Aplicativo do Azure ou o Azure Functions para usar Entrar com a Apple como um provedor de autenticação.
Para concluir o procedimento neste artigo, você deve ter se inscrito no programa de desenvolvedor da Apple. Para se inscrever no programa de desenvolvedores da Apple, vá para developer.apple.com/programs/enroll.
Atenção
Habilitar Entrar com a Apple desabilitará o gerenciamento do recurso de Autenticação/Autorização do Serviço de Aplicativo para seu aplicativo por meio de alguns clientes, como o portal do Azure, a CLI do Azure e o Azure PowerShell. O recurso conta com uma nova superfície de API que, durante a visualização, ainda não é contabilizada em todas as experiências de gerenciamento.
Criar uma aplicação no portal do programador Apple
Terá de criar um ID de aplicação e um ID de serviço no portal do programador Apple.
- No portal do desenvolvedor da Apple, vá para Certificados, Identificadores, Perfis de assinatura.
- Na guia Identificadores, selecione o botão (+).
- Na página Registrar um Novo Identificador, escolha IDs do aplicativo e selecione Continuar. (Os IDs de aplicativo incluem um ou mais IDs de serviço.)
- Na página Registar um ID da aplicação, forneça uma descrição e um ID de pacote e selecione Iniciar sessão com a Apple na lista de funcionalidades. Em seguida, selecione Continuar. Anote o seu Prefixo de ID de Aplicativo (ID de Equipe) nesta etapa, você precisará dele mais tarde.
- Reveja as informações de registo da aplicação e selecione Registar.
- Novamente, na guia Identificadores , selecione o botão (+ ).
- Na página Registrar um Novo Identificador, escolha IDs de Serviços e selecione Continuar.
- Na página Registrar uma ID de Serviços, forneça uma descrição e um identificador. A descrição é o que será mostrado ao usuário na tela de consentimento. O identificador será o seu ID de cliente utilizado na configuração do fornecedor Apple com o seu serviço de aplicações. Em seguida, selecione Configurar.
- Na janela pop-up, defina o ID do Aplicativo Principal como o ID do Aplicativo criado anteriormente. Especifique o domínio do seu aplicativo na seção domínio. Para o URL de retorno, use o URL
<app-url>/.auth/login/apple/callback
. Por exemplo,https://contoso.azurewebsites.net/.auth/login/apple/callback
. Em seguida, selecione Adicionar e Salvar. - Revise as informações de registro do serviço e selecione Salvar.
Gerar o segredo do cliente
A Apple exige que os desenvolvedores de aplicativos criem e assinem um token JWT como o valor secreto do cliente. Para gerar esse segredo, primeiro gere e baixe uma chave privada de curva elíptica do portal do desenvolvedor da Apple. Em seguida, use essa chave para assinar um JWT com uma carga específica.
Criar e transferir a chave privada
- Na guia Chaves no portal do desenvolvedor da Apple, escolha Criar uma chave ou selecione o botão (+).
- Na página Registrar uma nova chave, dê um nome à chave, marque a caixa ao lado de Entrar com a Apple e selecione Configurar.
- Na página Configurar Chave, vincule a chave à ID do aplicativo principal que você criou anteriormente e selecione Salvar.
- Termine de criar a chave confirmando as informações e selecionando Continuar e, em seguida, revisando as informações e selecionando Registrar.
- Na página Transferir a sua chave , transfira a chave. Ele será baixado como um
.p8
arquivo (PKCS#8) - você usará o conteúdo do arquivo para assinar o segredo do cliente JWT.
Estruturar o segredo do cliente JWT
A Apple exige que o segredo do cliente seja a codificação base64 de um token JWT. O token JWT decodificado deve ter uma carga estruturada como este exemplo:
{
"alg": "ES256",
"kid": "URKEYID001",
}.{
"sub": "com.yourcompany.app1",
"nbf": 1560203207,
"exp": 1560289607,
"iss": "ABC123DEFG",
"aud": "https://appleid.apple.com"
}.[Signature]
- sub: O ID do cliente Apple (também o ID do serviço)
- iss: O ID da sua equipa de programadores Apple
- aud: A Apple está recebendo o token, então eles são o público
- exp: Não mais de seis meses após nbf
A versão codificada em base64 da carga acima tem esta aparência: eyJhbGciOiJFUzI1NiIsImtpZCI6IlVSS0VZSUQwMDEifQ.eyJzdWIiOiJjb20ueW91cmNvbXBhbnkuYXBwMSIsIm5iZiI6MTU2MDIwMzIwNywiZXhwIjoxNTYwMjg5NjA3LCJpc3MiOiJBQkMxMjNERUZHIiwiYXVkIjoiaHR0cHM6Ly9hcHBsZWlkLmFwcGxlLmNvbSJ9.ABSXELWuTbgqfrIUz7bLi6nXvkXAz5O8vt0jB2dSHTQTib1x1DSP4__4UrlKI-pdzNg1sgeocolPNTmDKazO8-BHAZCsdeeTNlgFEzBytIpMKFfVEQbEtGRkam5IeclUK7S9oOva4EK4jV4VmgDrr-LGWWO3TaAxAvy3_ZoKohvFFkVG
Nota: A Apple não aceita JWTs secretos do cliente com uma data de expiração superior a seis meses após a data de criação (ou nbf). Isso significa que você precisará alternar o segredo do cliente, no mínimo, a cada seis meses.
Mais informações sobre como gerar e validar tokens podem ser encontradas na documentação do desenvolvedor da Apple.
Assine o segredo do cliente JWT
Você usará o arquivo baixado .p8
anteriormente para assinar o JWT secreto do cliente. Este ficheiro é um ficheiro PCKS#8 que contém a chave de assinatura privada no formato PEM. Existem muitas bibliotecas que podem criar e assinar o JWT para você.
Existem diferentes tipos de bibliotecas de código aberto disponíveis on-line para criar e assinar tokens JWT. Para obter mais informações sobre como gerar tokens JWT, consulte JSON Web Token (JWT). Por exemplo, uma maneira de gerar o segredo do cliente é importando o pacote NuGet Microsoft.IdentityModel.Tokens e executando uma pequena quantidade de código C# mostrado abaixo.
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: O seu ID de equipa de programadores Apple
- clientId: O ID do cliente Apple (também o ID do serviço)
- p8key: A chave de formato PEM - você pode obter a chave abrindo o
.p8
arquivo em um editor de texto e copiando tudo entre-----BEGIN PRIVATE KEY-----
e-----END PRIVATE KEY-----
sem quebras de linha - keyId: O ID da chave baixada
Esse token retornado é o valor secreto do cliente que você usará para configurar o provedor Apple.
Importante
O segredo do cliente é uma credencial de segurança importante. Não compartilhe esse segredo com ninguém nem o distribua dentro de um aplicativo cliente.
Adicione o segredo do cliente como uma configuração de aplicativo para o aplicativo, usando um nome de configuração de sua escolha. Anote este nome para mais tarde.
Adicionar informações do provedor ao seu aplicativo
Nota
A configuração necessária está em um novo formato de API, atualmente suportado apenas pela configuração baseada em arquivo (visualização). Você precisará seguir as etapas abaixo usando esse arquivo.
Esta seção irá orientá-lo através da atualização da configuração para incluir seu novo IDP. Segue-se um exemplo de configuração.
Dentro do
identityProviders
objeto, adicione umapple
objeto se ainda não existir.Atribua um objeto a essa chave com um
registration
objeto dentro dela e, opcionalmente, umlogin
objeto:"apple" : { "registration" : { "clientId": "<client ID>", "clientSecretSettingName": "APP_SETTING_CONTAINING_APPLE_CLIENT_SECRET" }, "login": { "scopes": [] } }
a. Dentro do
registration
objeto, defina oclientId
para o ID do cliente que você coletou.b. Dentro do
registration
objeto, definaclientSecretSettingName
como o nome da configuração do aplicativo onde você armazenou o segredo do cliente.c. Dentro do objeto, você pode optar por definir a
scopes
matriz para incluir uma lista de escopos usados ao autenticar com alogin
Apple, como "nome" e "e-mail". Se os escopos estiverem configurados, eles serão explicitamente solicitados na tela de consentimento quando os usuários entrarem pela primeira vez.
Depois que essa configuração for definida, você estará pronto para usar seu provedor Apple para autenticação em seu aplicativo.
Uma configuração completa pode se parecer com o exemplo a seguir (onde a configuração APPLE_GENERATED_CLIENT_SECRET aponta para uma configuração de aplicativo que contém um JWT gerado):
{
"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
}
}
}
Passos seguintes
- Visão geral de Autenticação/Autorização do Serviço de Aplicativo.
- Tutorial: Autenticar e autorizar usuários de ponta a ponta no Serviço de Aplicativo do Azure