AppleAuth é uma biblioteca muito simples para .NET que encapsula a lógica de comunicação com a API REST da Apple para Sign in with Apple. O principal objetivo é facilitar a implementação do Sign in with Apple para qualquer aplicação web.
Para instalar o pacote, execute o seguinte comando no Console do Gerenciador de Pacotes:
PM > Install - Package AppleAuth . NET
Ou, alternativamente, apenas instale o pacote usando o gerenciador de pacotes Nuget. O projeto pode ser encontrado aqui: Link para NuGet
Para usar o Sign in with Apple, você deve se inscrever no Apple Developer Program. Depois de se inscrever no programa, vá para Ajuda da conta do desenvolvedor e navegue até Configurar recursos do aplicativo > Fazer login com a Apple. Lá você pode encontrar as informações para configurar o Sign in with Apple para seu aplicativo.
Você também pode conferir minha postagem do blog para obter mais informações sobre como definir as configurações em sua conta de desenvolvedor implementando o Sign in with Apple.
Em seguida, você deve configurar sua página da web para Sign in with Apple. Siga as orientações da documentação oficial. Você também pode consultar este link para ver como configurar os estilos dos botões.
Se você estiver implantando seu aplicativo em um Aplicativo Web do Azure, adicione a seguinte configuração: WEBSITE_LOAD_USER_PROFILE = 1
, para que o IIS possa acessar o armazenamento de chave privada no armazenamento da conta do usuário. Você pode aplicar isso no portal do Azure em Configuração > Configurações do aplicativo ou executar o seguinte comando no Cloud Shell:
az webapp config appsettings set --name <app-name> --resource-group <resource-group-name> --settings WEBSITE_LOAD_USER_PROFILE=1
.
Também é importante observar que esta configuração está disponível apenas para níveis de preços não compartilhados.
Se você estiver implantando seu aplicativo em seu próprio servidor web, executando o Microsoft IIS, você precisará habilitar "Carregar perfil de usuário" em "Configurações avançadas" em seu pool de aplicativos. Caso contrário, você receberá uma CryptographicException dizendo "O sistema não consegue encontrar o arquivo especificado".
AppleAuthProvider.cs
Crie uma nova instância de AppleAuthProvider
, passe os parâmetros necessários e pronto. Use o método GetAuthorizationToken
para obter um token de autorização da Apple; Use o método GetRefreshToken
para verificar se um usuário ainda está usando ‘Sign in with Apple’ para entrar no seu sistema; Use o método GetButtonHref
para obter uma string de consulta para o botão ‘Entrar com Apple’.
Depois que o usuário clicar no botão “Entrar com Apple” em sua página, ele será redirecionado para https://appleid.apple.com/. Depois que eles fornecerem suas credenciais, a Apple fará uma solicitação POST para o URL que você especificou como URL de redirecionamento. Você pode lidar com a solicitação usando InitialTokenResponse.cs
. Para recuperar um token de autorização você deve primeiro criar uma nova instância de AppleAuthProvider
com os parâmetros necessários. Depois disso basta chamar o método GetAuthorizationToken() passando code
do seu objeto InitialTokenResponse
e sua chave privada. Aqui está um exemplo de implementação em C#:
[ HttpPost ]
public async Task HandleResponseFromApple ( AppleAuth . TokenObjects . InitialTokenResponse response )
{
string privateKey = System . IO . File . ReadAllText ( "path/to/file.p8" ) ;
AppleAuth . AppleAuthProvider provider = new AppleAuth . AppleAuthProvider ( "MyClientID" , "MyTeamID" , "MyKeyID" , "MyRedirectUrl" , "SomeState" ) ;
AppleAuth . TokenObjects . AuthorizationToken authorizationToken = await provider . GetAuthorizationToken ( response . code , privateKey ) ;
}
Lembre-se de que os tokens retornados pela Apple têm vida curta, portanto, você deve criar uma sessão ou um usuário em seu sistema usando o objeto AppleAuth.TokenObjects.AuthorizationToken
retornado. Depois disso você pode verificar se o usuário ainda está logado usando "Sign in with Apple" recuperando um token de atualização usando o método GetRefreshToken
:
[ HttpPost ]
public async Task < bool > IsUserUsingAppleID ( )
{
string privateKey = System . IO . File . ReadAllText ( "path/to/file.p8" ) ;
AppleAuth . AppleAuthProvider provider = new AppleAuthProvider ( "MyClientID" , "MyTeamID" , "MyKeyID" , "https://myredirecturl.com/HandleResponseFromApple" , "SomeState" ) ;
AppleAuth . TokenObjects . AuthorizationToken refreshToken = await provider . GetRefreshToken ( authorizationToken . RefreshToken , privateKey ) ;
return refreshToken != null ;
}
Você é mais que bem-vindo para contribuir com o projeto e torná-lo melhor. Ao contribuir, tente manter uma atitude estritamente profissional, respeitosa e amigável. Certifique-se também de comunicar a alteração que deseja fazer por meio de problema ou qualquer outro método aos proprietários deste repositório.
Não temos diretrizes rígidas para a criação de solicitações pull, mas você pode usar o fluxo já conhecido do GitHub para obter diretrizes gerais.
Este projeto está licenciado sob a licença MIT - consulte LICENSE.md para obter detalhes