Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Este artigo mostra como configurar o Serviço de Aplicativo do Azure ou o Azure Functions para Entrar com Apple (Azure AD) como um provedor de autenticação.
Para concluir o procedimento neste artigo, você deve se inscrever no programa de desenvolvedores da Apple. Para se registrar no programa de desenvolvedor da Apple, acesse developer.apple.com/programs/enroll.
Cuidado
Habilitar a entrada com a Apple desabilita o gerenciamento do recurso de Autenticação e 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 depende de uma nova interface de API que, durante a fase de pré-visualização, ainda não está disponível em todas as interfaces de gerenciamento.
Crie um aplicativo no Portal do Desenvolvedor da Apple
Crie uma ID do aplicativo e uma ID de serviço no portal do Desenvolvedor da Apple.
No Portal do Desenvolvedor da Apple, acesse Certificados, Identificadores, e Perfis.
Na guia Identificadores, selecione o botão (+) .
Na página Registrar um Novo Identificador, escolha IDs de aplicativo e selecione Continuar. As IDs do aplicativo incluem uma ou mais IDs de serviço.
Na página Registrar uma ID do Aplicativo , forneça uma descrição e uma ID do pacote.
Na lista de recursos, selecione Entrar com a Apple e selecione Continuar. Anote o prefixo da ID do aplicativo (ID da equipe) nesta etapa. Isso será necessário mais tarde.
Revise as informações de registro do aplicativo e selecione Registrar.
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. Em seguida, selecione Configurar.
A descrição é o que o usuário vê na tela de consentimento. O identificador é o sua ID de cliente usado na configuração do provedor da Apple com o serviço do seu aplicativo.
Na caixa de diálogo, defina a ID do Aplicativo Primário como a ID do Aplicativo que você criou anteriormente. Especifique o domínio do aplicativo na seção domínio. Para a URL de retorno, use a URL
<app-url>/.auth/login/apple/callback. Por exemplo,https://contoso.azurewebsites.net/.auth/login/apple/callback. Em seguida, selecione Adicionar e Salvar.
Examine as informações de registro do serviço e selecione Salvar.
Gerar segredo do cliente
A Apple exige que os desenvolvedores de aplicativos criem e assinem um JSON Web Token (JWT) como valor do segredo 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 útil específica.
Crie e baixe 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, selecione Entrar com a Apple e selecione Configurar.
- Na página Configurar chave, vincule a chave à ID do aplicativo primário que você criou anteriormente e selecione Salvar.
- Conclua a criação da chave confirmando as informações e selecionando Continuar. Em seguida, examine as informações e selecione Registrar.
- Na página Baixar sua Chave, baixe a chave. Ele é baixado como um arquivo
.p8(PKCS#8). Use o conteúdo do arquivo para assinar o JWT secreto do cliente.
Estruture o JWT do segredo do cliente
A Apple requer que o segredo do cliente seja a codificação base64 de um JWT. O 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: A ID do cliente da Apple, também a ID do serviço
- ISS: sua ID da Equipe de Desenvolvedores da Apple
- aud: a Apple está recebendo o token, portanto, ela é o público-alvo
- exp: não mais do que seis meses após NBF
A versão codificada em base64 deste conteúdo tem esta aparência:
eyJhbGciOiJFUzI1NiIsImtpZCI6IlVSS0VZSUQwMDEifQ.eyJzdWIiOiJjb20ueW91cmNvbXBhbnkuYXBwMSIsIm5iZiI6MTU2MDIwMzIwNywiZXhwIjoxNTYwMjg5NjA3LCJpc3MiOiJBQkMxMjNERUZHIiwiYXVkIjoiaHR0cHM6Ly9hcHBsZWlkLmFwcGxlLmNvbSJ9.ABSXELWuTbgqfrIUz7bLi6nXvkXAz5O8vt0jB2dSHTQTib1x1DSP4__4UrlKI-pdzNg1sgeocolPNTmDKazO8-BHAZCsdeeTNlgFEzBytIpMKFfVEQbEtGRkam5IeclUK7S9oOva4EK4jV4VmgDrr-LGWWO3TaAxAvy3_ZoKohvFFkVG
Observação
A Apple não aceita JWTs com segredo de cliente cuja data de validade seja superior a seis meses após a data de criação, ou data nbf. Você precisa rotacionar o segredo do cliente, no mínimo, a cada seis meses.
Para obter mais informações sobre como gerar e validar tokens, consulte a documentação do desenvolvedor da Apple.
Assine o JWT do segredo cliente
Você usa o arquivo .p8 baixado anteriormente para assinar o JWT do segredo do cliente. Esse arquivo é um arquivo PKCS nº 8 que contém a chave de assinatura privada no formato PEM. Há muitas bibliotecas que podem criar e assinar o JWT para você.
Há diferentes tipos de bibliotecas de software livre disponíveis online para criar e assinar JWTs. Para obter mais informações sobre como gerar JWTs, consulte JWT (Token Web JSON).
Por exemplo, uma maneira de gerar o segredo do cliente é importar o pacote NuGet Microsoft.IdentityModel.Tokens e executar o código C# mostrado aqui:
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: sua ID da Equipe de Desenvolvedores da Apple
- clientId: A ID do cliente da Apple, também a 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: a ID da chave baixada
Esse token retornado é o valor do segredo do cliente que você usa para configurar o provedor da Apple.
Importante
O segredo do cliente é uma credencial de segurança importante. Não compartilhe esse segredo com ninguém ou distribua-o em 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 usar mais tarde.
Adicione informações do provedor ao seu aplicativo
Observação
A configuração necessária está em um novo formato de API, que atualmente só tem suporte da Configuração baseada em arquivo (versão prévia). Você precisa seguir as etapas aqui para usar esse arquivo.
Esta seção descreve a atualização da configuração para incluir seu novo IDP. A seguir, temos um exemplo de configuração.
No objeto
identityProviders, adicione um objetoapplese ainda não existir.Atribua um objeto a essa chave com um objeto
registrationincluído e, opcionalmente, um objetologin:"apple" : { "registration" : { "clientId": "<client ID>", "clientSecretSettingName": "APP_SETTING_CONTAINING_APPLE_CLIENT_SECRET" }, "login": { "scopes": [] } }registrationNo objeto, definaclientIdcomo o ID do cliente que você coletou.registrationNo objeto, definaclientSecretSettingNamecomo o nome da configuração do aplicativo em que você armazenou o segredo do cliente.No objeto
login, você pode optar por definir o arrayscopespara incluir uma lista de escopos usados na autenticação com a Apple, como nome e email. Se os escopos estiverem configurados, eles serão explicitamente solicitados na tela de consentimento quando os usuários entrarem pela primeira vez.
Depois de definir essa configuração, você estará pronto para usar seu provedor apple para autenticação em seu aplicativo.
Uma configuração completa pode ser semelhante ao exemplo a seguir, em que 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
}
}
}