Autenticação do ID Apple
Visão geral
O provedor de autenticação do ID Apple permite que os usuários façam login com suas credenciais do ID Apple por meio do Sign in with Apple. Esse método de autenticação usa o OAuth 2 padrão do setor.0 protocolo de autorização .
Quando um usuário faz login com sucesso por meio do Sign in with Apple, a Apple retorna um objeto de credencial que inclui um JSON Web Token que o provedor de ID Apple usa para autenticar o usuário. Se o usuário concedeu permissões ao seu aplicativo, o objeto de credencial também pode incluir o nome e o endereço de e-mail do usuário.
Para obter informações adicionais sobre como implementar o Sign in with Apple, confira:
A documentação oficial do Sign in with Apple no Portal do Desenvolvedor da Apple
A sessão Introducing Sign In with Apple da WWDC 2019
O aplicativo de referência associado.
Observação
Um aplicativo iOS que usa autenticação de ID Apple deve ter como alvo o iOS 13 ou mais recente.
O diagrama a seguir mostra o fluxo lógico OAuth:
O que você precisa
Antes de implementar a autenticação do ID Apple, você precisará do seguinte:
Uma conta ativa do Apple Developer Program.
Xcode 11 ou mais recente.
Configurar a autenticação do ID Apple
Ao usar Sign-in with Apple com Atlas App Services, você pode configurar o provedor de autenticação Apple para um aplicativo móvel ou web.
Se quiser usar o Login with Apple para ambos, você pode configurar seu próprio fluxo manual de login com a Apple para o aplicativo web ou móvel. Em seguida, use o JWT que retorna com o provedor de autenticação JWT personalizado. Nos SDKs do Realm, você pode então vincular as identidades de usuário de cada provedor de autenticação a um único usuário.
Para utilizar o Iniciar sessão com a Apple exclusivamente com um aplicativo web ou móvel, escolha o tipo de aplicativo e siga este guia.
Adicionar "Login with Apple" ao seu aplicativo
Seu aplicativo deve ter o direito Login with Apple para usar esse recurso.
Selecione o destino da aplicação no Xcode.
Go para a aba Signing & Capabilities e selecione + Capability.
Procure e selecione a opção Fazer login com a Apple.
Em seguida, confirme se está habilitado no Apple Developer Portal.
Navegue até a página Certificates, Identifiers and Profiles do Apple Developer Portal.
Selecione o identificador da sua aplicação no menu suspenso. Isso levará você ao painel App ID Configuration.
Role para baixo até ver a caixa de seleção para Sign In with Apple. Se essa caixa de seleção não estiver marcada, selecione-a. Se você fez alterações, pressione o botão Save.
Anote o Bundle ID da aplicação. Você precisa do ID do pacote para criar um o segredo do cliente e para configurar o Início de sessão com a Apple no App Services.
Crie uma Chave Privada
O segredo do cliente para conectar-se com a Apple é um JSON web token que você cria e assina com uma chave privada. Você precisa gerar a chave privada por meio do Portal do programador da Apple.
Clique em Keys no menu de navegação esquerdo.
Clique no ícone de adição azul ao lado de Keys.
Na página Register a New Key, insira um Key Name descritivo e role para baixo para encontrar a linha Sign in with Apple. Marque a caixa de seleção para ativar a opção "Login with Apple" e clique em Configure.
Na página Configure Key, selecione o ID da aplicação para a aplicação como Primary App ID e clique em Save.
Clique em Continue para revisar sua configuração de chave. Quando estiver certo de que configurou a chave corretamente, clique em Register.
Copie o valor Key ID em algum lugar que você possa acessá-lo mais tarde e clique em Download para baixar a chave como um arquivo de texto
.p8
. You will use these to generate the client secret.Importante
Salve a Chave
Você só pode baixar a chave uma vez. Certifique-se de salvar a chave em algum lugar seguro, caso você precise dela novamente. Se você perder a chave, precisará gerar uma nova.
Criar o JWT do segredo do cliente
Agora você pode criar o JWT secreto do cliente para o fornecedor de autenticação do ID Apple. Certifique-se de que tem as seguintes informações:
O Bundle ID da aplicação. Você usará isso como
client_id
no roteiro abaixo.O Key ID da chave que você criou e o arquivo
.p8
que contém a chave.Seu ID de equipe da Apple. Você pode encontrar essa opção no canto superior direito do Portal do programador Apple.
Depois de confirmar que tem todas as informações necessárias, é possível utilizar um script para gerar o JWT. Você pode definir seu próprio script ou usar o script desta etapa.
Para gerar o JWT, usaremos a joia jwt. Para instalá-lo, execute o seguinte:
gem install jwt
Crie um novo arquivo chamado generate_client_secret.rb
e copie o seguinte bloco de código para o arquivo.
# Source: https://developer.okta.com/blog/2019/06/04/what-the-heck-is-sign-in-with-apple require 'jwt' # Update these values with your app's information team_id = '<Apple Team ID>' client_id = '<Bundle ID or Services ID>' key_id = '<Apple Key ID>' key_file = '<Key File Path>' # Define the JWT's headers and claims headers = { # The token must be signed with your key 'kid' => key_id } claims = { # The token is issued by your Apple team 'iss' => team_id, # The token applies to Apple ID authentication 'aud' => 'https://appleid.apple.com', # The token is scoped to your application 'sub' => client_id, # The token is valid immediately 'iat' => Time.now.to_i, # The token expires in 6 months (maximum allowed) 'exp' => Time.now.to_i + 86400*180, } # Read in the key and generate the JWT ecdsa_key = OpenSSL::PKey::EC.new IO.read key_file token = JWT.encode claims, ecdsa_key, 'ES256', headers # Print the JWT to stdout puts token
Atualize os valores de team_id
, client_id
, key_id
e key_file
para corresponder às informações do seu aplicativo e então salve o arquivo. Quando estiver pronto para gerar o JWT, execute o script em seu shell:
ruby generate_client_secret.rb >> client_secret.txt
Importante
Salve o JWT
O script generate_client_secret.rb
gera saídas para stdout. Quando chamamos isso, adicionamos stdout a um arquivo chamado client_secret.txt
. Você precisará do JWT para configurar o fornecedor de ID Apple nos App Services.
Configurar o provedor no App Services
Neste ponto, você já configurou um aplicativo Apple e gerou as credenciais OAuth 2.0 necessárias. Agora você pode configurar o fornecedor de autenticação da ID Apple com as credenciais, permitindo assim que os usuários do aplicativo de clientes do App Services façam login.
Clique em Authentication no menu de navegação esquerdo e clique em Apple ID.
Ative a alternância Provider Enabled.
Para o App Services Client ID, insira Bundle ID do seu aplicativo.
Para Client Secret, crie um novo segredo com um nome descritivo e configure o Client Secret Value para a string JWT que você gerou. Como alternativa, você pode selecionar um segredo preexistente que contenha o JWT.
Clique em Save para concluir a configuração do fornecedor. Para disponibilizar o fornecedor para os aplicativos de clientes, você precisa implementar suas alterações. Clique em Review & Deploy Changes e depois, em Deploy.
Para habilitar e configurar o provedor de autenticação da Apple com appservices, defina um objeto de configuração para ele no /auth/providers.json
.
As configurações do fornecedor Apple têm o seguinte formulário:
{ "oauth2-apple": { "name": "oauth2-apple", "type": "oauth2-apple", "disabled": <boolean>, "config": { "clientId": "<Bundle ID>" }, "secret_config": { "clientSecret": "<Secret Name>" }, "redirect_uris": ["<string>", ...] } }
Campo | Descrição |
---|---|
Client ID config.clientId | Obrigatório. O Bundle ID do seu aplicativo. |
Client Secret secret_config.clientSecret | Obrigatório. O nome de um Secret que armazena o Client Secret JSON web token que você gerou. |
Redirect URIs redirect_uris | Necessário para aplicações web. Não necessário para aplicativos móveis. |
Depois de criar o arquivo de configuração, você pode disponibilizar o provedor de autenticação do ID Apple para os aplicação cliente distribuindo o arquivo .
Para implementar um rascunho de aplicação com o App Services CLI:
appservices push
Para implantar um rascunho de aplicação com sistema automático do Github :
git add ./auth/providers.json git commit -m "Configure and Enable Apple ID Authentication" git push origin <branch name>
Criar um ID de aplicativo
Um ID Apple App representa sua aplicação e permite que você acesse serviços como Iniciar sessão com a Apple. Para configurar o fornecedor de ID Apple, crie um novo ID do aplicativo.
Navegue até a página Certificates, Identifiers and Profiles do Apple Developer Portal.
Clique em Identifiers no menu de navegação esquerdo.
Clique no ícone de adição azul ao lado de Identifiers.
Na página Register a New Identifier , selecione App IDs e clique em Continue.
Na Register an App ID página , selecione o Platform em que seu aplicativo é executado e, em seguida, insira um breve Description e uma notação Bundle ID de DNS reversa .
Role a página Register an App ID para baixo até ver o recurso Sign in with Apple . Marque a caixa de seleção para habilitar o recurso.
Pressione o botão Continue na parte superior da página. Conclua as outras etapas de configuração aplicáveis ao seu aplicativo e pressione o botão Register .
Criar um ID de serviços
Um ID de Serviços Apple representa um único aplicação e permite que você configure um URL de chamada de resposta de chamada de autorização e defina uma chave privada para o aplicação.
Clique em Identifiers no menu de navegação esquerdo.
Clique no ícone de adição azul ao lado de Identifiers.
Na página Register a New Identifier , selecione Services IDs e clique em Continue.
Na Register a Services ID página , insira um breve Description e uma notação de DNS Identifier reversa .
Importante
Salvar o Identificador
O valor Identifier da ID do Services é o Client ID do seu aplicativo. Você precisará deste valor posteriormente para configurar o fornecedor de ID Apple no Atlas App Services.
Pressione o botão Continue . Confirme os detalhes e pressione Register.
Clique no serviço que você acabou de criar. Marque a caixa de seleção para ativar Sign in with Apple e clique em Configure. Selecione a ID do aplicativo que você criou como Primary App ID.
Insira seus domínios, subdomínios e URLs de retorno para o ID de serviços. Pressione o botão Next .
Clique em Continue e depois, em Save. Confirme que você configurou corretamente o ID de Serviços e clique em Register.
Crie uma Chave Privada
O segredo do cliente para conectar-se com a Apple é um JSON web token que você cria e assina com uma chave privada. Você precisa gerar a chave privada por meio do Portal do programador da Apple.
Clique em Keys no menu de navegação esquerdo.
Clique no ícone de adição azul ao lado de Keys.
Na página Register a New Key, insira um Key Name descritivo e role para baixo para encontrar a linha Sign in with Apple. Marque a caixa de seleção para ativar a opção "Login with Apple" e clique em Configure.
Na página Configure Key , selecione o ID do aplicativo que você criou como Primary App ID e clique em Save.
Clique em Continue para revisar sua configuração de chave. Quando estiver certo de que configurou a chave corretamente, clique em Register.
Copie o valor Key ID em algum lugar que você possa acessá-lo mais tarde e clique em Download para baixar a chave como um arquivo de texto
.p8
. Você os usará para gerar o segredo do cliente.Importante
Salve a Chave
Você só pode baixar a chave uma vez. Certifique-se de salvar a chave em algum lugar seguro, caso você precise dela novamente. Se você perder a chave, precisará gerar uma nova.
Criar o JWT do segredo do cliente
Agora você pode criar o JWT secreto do cliente para o fornecedor de autenticação do ID Apple. Certifique-se de que tem as seguintes informações:
O Services ID que você criou. Você usará isso como
client_id
no roteiro abaixo.- O Key ID da chave que você criou e o
.p8
- que contém a chave.
- O Key ID da chave que você criou e o
- Seu ID da equipe Apple. Você pode encontrar isso no canto superior direito do painel da Apple
- Portal do Desenvolvedor.
Depois de confirmar que tem todas as informações necessárias, é possível utilizar um script para gerar o JWT. Você pode definir seu próprio script ou usar o script desta etapa.
Para gerar o JWT, usaremos a joia jwt. Para instalá-lo, execute o seguinte:
gem install jwt
Crie um novo arquivo chamado generate_client_secret.rb
e copie o seguinte bloco de código para o arquivo.
# Source: https://developer.okta.com/blog/2019/06/04/what-the-heck-is-sign-in-with-apple require 'jwt' # Update these values with your app's information team_id = '<Apple Team ID>' client_id = '<Bundle ID or Services ID>' key_id = '<Apple Key ID>' key_file = '<Key File Path>' # Define the JWT's headers and claims headers = { # The token must be signed with your key 'kid' => key_id } claims = { # The token is issued by your Apple team 'iss' => team_id, # The token applies to Apple ID authentication 'aud' => 'https://appleid.apple.com', # The token is scoped to your application 'sub' => client_id, # The token is valid immediately 'iat' => Time.now.to_i, # The token expires in 6 months (maximum allowed) 'exp' => Time.now.to_i + 86400*180, } # Read in the key and generate the JWT ecdsa_key = OpenSSL::PKey::EC.new IO.read key_file token = JWT.encode claims, ecdsa_key, 'ES256', headers # Print the JWT to stdout puts token
Atualize os valores de team_id
, client_id
, key_id
e key_file
para corresponder às informações do seu aplicativo e então salve o arquivo. Quando estiver pronto para gerar o JWT, execute o script em seu shell:
ruby generate_client_secret.rb >> client_secret.txt
Importante
Salve o JWT
O script generate_client_secret.rb
gera saídas para stdout. Quando chamamos isso, adicionamos stdout a um arquivo chamado client_secret.txt
. Você precisará do JWT para configurar o fornecedor de ID Apple nos App Services.
Configurar o provedor no App Services
Neste ponto, você já configurou um aplicativo Apple e gerou as credenciais OAuth 2.0 necessárias. Agora você pode configurar o fornecedor de autenticação da ID Apple com as credenciais, permitindo assim que os usuários do aplicativo de clientes do App Services façam login.
Clique em Authentication no menu de navegação esquerdo e clique em Apple ID.
Ative a alternância Provider Enabled.
Para o App Services Client ID, insira o Services ID Apple que você obteve quando criou um Services ID na etapa 2 acima.
Para Client Secret, crie um novo segredo com um nome descritivo e configure o Client Secret Value para a string JWT que você gerou. Como alternativa, você pode selecionar um segredo preexistente que contenha o JWT.
Para Redirect URIs, clique em Add Redirect URI e insira a URL para a qual o App Services deve redirecionar assim que o processo OAuth for concluído. Forneça uma URL para um domínio que você controla e use um link universal para redirecionar o usuário de volta para sua aplicação.
Clique em Save para concluir a configuração do fornecedor. Para disponibilizar o fornecedor para os aplicativos de clientes, você precisa implementar suas alterações. Clique em Review & Deploy Changes e depois, em Deploy.
Para habilitar e configurar o provedor de autenticação da Apple com appservices
, defina um objeto de configuração para ele no /auth/providers.json
.
As configurações do fornecedor Apple têm o seguinte formulário:
{ "oauth2-apple": { "name": "oauth2-apple", "type": "oauth2-apple", "disabled": <boolean>, "config": { "clientId": "<Apple Services ID>" }, "secret_config": { "clientSecret": "<Secret Name>" }, "redirect_uris": ["<string>", ...] } }
Campo | Descrição |
---|---|
Client ID config.clientId | Obrigatório. O Services ID da Apple que você criou quando concluiu a etapa 2 acima. |
Client Secret secret_config.clientSecret | Obrigatório. O nome de um Secret que armazena o Client Secret JSON web token que você gerou. |
Redirect URIs redirect_uris | Necessário para aplicações web. Uma lista de URLs de redirecionamento permitidas. Depois que um usuário concluir o processo de autenticação, o App Services o redirecionará de volta para um URI de redirecionamento especificado ou, se nenhum URI de redirecionamento for especificado, para o URL do qual ele iniciou a solicitação de autenticação. O App Services só redirecionará um usuário para um URI que corresponda exatamente a uma entrada nessa lista, incluindo o protocolo e quaisquer barras à direita. Forneça uma URL para um domínio que você controla e use um link universal para redirecionar o usuário de volta para sua aplicação. |
Depois de criar o arquivo de configuração, você pode disponibilizar o provedor de autenticação do ID Apple para os aplicação cliente distribuindo o arquivo .
Para implementar um rascunho de aplicação com o App Services CLI:
appservices push
Para implantar um rascunho de aplicação com sistema automático do Github :
git add ./auth/providers.json git commit -m "Configure and Enable Apple ID Authentication" git push origin <branch name>
Exemplos
Para obter exemplos de código que demonstram como se registrar e se conectar usando a autenticação da Apple, consulte a documentação dos Realm SDKs: