Partilhar via


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.

  1. No portal do desenvolvedor da Apple, vá para Certificados, Identificadores, Perfis de assinatura.
  2. Na guia Identificadores, selecione o botão (+).
  3. 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.) Registar um novo identificador de aplicação no Apple Developer Portal
  4. 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. Configurar um novo identificador de aplicação no Apple Developer Portal
  5. Reveja as informações de registo da aplicação e selecione Registar.
  6. Novamente, na guia Identificadores , selecione o botão (+ ). Criar um novo identificador de serviço no Apple Developer Portal
  7. Na página Registrar um Novo Identificador, escolha IDs de Serviços e selecione Continuar. Registar um novo identificador de serviço no Apple Developer Portal
  8. 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. Fornecer uma descrição e um identificador
  9. 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. Especificando o domínio e a URL de retorno para o registro
  10. 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

  1. Na guia Chaves no portal do desenvolvedor da Apple, escolha Criar uma chave ou selecione o botão (+).
  2. Na página Registrar uma nova chave, dê um nome à chave, marque a caixa ao lado de Entrar com a Apple e selecione Configurar.
  3. Na página Configurar Chave, vincule a chave à ID do aplicativo principal que você criou anteriormente e selecione Salvar.
  4. Termine de criar a chave confirmando as informações e selecionando Continuar e, em seguida, revisando as informações e selecionando Registrar.
  5. 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.

  1. Dentro do identityProviders objeto, adicione um apple objeto se ainda não existir.

  2. Atribua um objeto a essa chave com um registration objeto dentro dela e, opcionalmente, um login objeto:

    "apple" : {
       "registration" : {
            "clientId": "<client ID>",
            "clientSecretSettingName": "APP_SETTING_CONTAINING_APPLE_CLIENT_SECRET" 
        },
       "login": {
             "scopes": []
       }
    }
    

    a. Dentro do registration objeto, defina o clientId para o ID do cliente que você coletou.

    b. Dentro do registration objeto, defina clientSecretSettingName 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 a login 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