Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Este artigo mostra-lhe como configurar o Serviço de Aplicativos do Azure ou funções do Azure para utilizar o recurso "Início de Sessão com Apple" como fornecedor 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 irá desativar a gestão da funcionalidade de autenticação/autorização do Serviço de Aplicação para a sua aplicação através de algumas interfaces de cliente, como o portal do Azure, a CLI do Azure e o Azure PowerShell. O recurso baseia-se numa nova interface de API que, durante a pré-visualização, ainda não está integrada em todas as ferramentas de gestão.
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 e Perfis.
- 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, no separador 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, utilize 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 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 um payload específico.
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 Descarregar a Sua Chave, descarregue a chave. Ele será baixado como um
.p8arquivo (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 JWT. O JWT decodificado deve ter uma carga útil 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 de cliente da Apple (também o ID de 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 a chave secreta 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 JWTs. Para obter mais informações sobre como gerar JWTs, 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
.p8arquivo 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
identityProvidersobjeto, adicione umappleobjeto se ainda não existir.Atribua um objeto a essa chave com um
registrationobjeto dentro dela e, opcionalmente, umloginobjeto:"apple" : { "registration" : { "clientId": "<client ID>", "clientSecretSettingName": "APP_SETTING_CONTAINING_APPLE_CLIENT_SECRET" }, "login": { "scopes": [] } }a) Dentro do
registrationobjeto, defina oclientIdpara o ID do cliente que você coletou.b. Dentro do
registrationobjeto, definaclientSecretSettingNamecomo o nome da configuração do aplicativo onde você armazenou o segredo do cliente.c. Dentro do objeto
login, pode optar por definir o arrayscopespara incluir uma lista de escopos utilizados ao autenticar com a 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
}
}
}