

Passkeys são incríveis! Apenas um par público/privado que você pode usar para se autenticar com um site (ou um aplicativo associado).
Eles são muito mais convenientes que as senhas porque você não precisa se lembrar de nada ou escolher algo que satisfaz regras cada vez mais complexas. Eles também são mais seguros porque estão vinculados ao site com o qual você está autenticando, potencialmente eliminando o phishing, e apenas uma chave pública é armazenada no servidor, para que não haja nada que valha a pena roubar (a chave pública é que você adivinhou, público).
A chave privada é mantida por você. Ou melhor, seu gerenciador de senhas, para que possa ser compartilhado entre os dispositivos. Apple, Google, Microsoft e Amazon estão incentivando ativamente a captação. Se você armazenar uma pasta em um gerenciador de senhas (como Dashlane, 1Password ou Apple Keychain), também poderá compartilhá -lo com os amigos.
Registrar -se e fazer login em sites e aplicativos, até agora, era uma barreira enorme, mas com as passagens, ela é finalmente resolvida. Vamos implementá -los em todos os lugares para que possamos finalmente consignar senhas para o compartimento. As passagens são mais fáceis e mais seguras - o que não gosta?
Na Red Badger, mantemos o kit de ferramentas de desenvolvimento de aplicativos de código aberto de código aberto chamado Crux. Ele usa a ferrugem e ambly web para facilitar e divertir a criação de aplicativos que são executados em iOS, Android e Web (e linha de comando e aplicativos de terminal, e ...).
O Crux nos permite criar a funcionalidade do nosso aplicativo uma vez e testá -lo em milissegundos, permitindo garantir que nosso aplicativo funcione corretamente e exatamente da mesma maneira em todas as plataformas.
Este repo é sobre levar as passagens para os aplicativos Crux.
Não é massivamente complicado fazer isso, mas existem algumas etapas para o registro e o login que você precisa para acertar. É um pouco complicado adicioná -lo aos aplicativos da Web existentes (e aplicativos iOS e aplicativos Android) e garantir que a implementação esteja correta nos três. Crux ajuda aqui. Podemos simplesmente construir e testá -lo uma vez.
O diretório shared neste repositório contém uma capacidade de pasta Crux, que, juntamente com a capacidade crux_http , é orquestrada por um aplicativo de autenticação Crux, com testes, que podem ser usados como um "sub-aplicativo"-aninhados dentro de outro aplicativo Crux.
Meu plano foi ótimo - reunindo tecnologia muito legal, como pastilhas, ferrugem, montagem de web e crux - mas eu queria mais.
Então eu adicionei o giro Fermyon na equação. Spin é ótimo! Não tem servidor sem o início frio. Serviços Ultra Lightweight iniciados em resposta a uma solicitação recebida (em microssegundos) e morrem após o processamento da solicitação.
Para apoiar as passagens, precisamos de um back -end que expõe o protocolo WebAuthn. Está escrito em ferrugem e compilado ao WebAssembly ( wasm32-wasi ). Eu tive que pular por alguns aros, como vender uma versão compatível com WASM do OpenSSL-estamos na vantagem sangrando aqui-mas funciona!.
O servidor também hospeda um aplicativo da Web Leptos escrito em Rust.
Pode ser implantado, como é, para Fermyon Cloud.
Mudar para o diretório crux-passkey-server :
cd crux-passkey-server Crie um arquivo .env com o seguinte conteúdo:
export SPIN_VARIABLE_DOMAIN_LOCAL=localhost
export SPIN_VARIABLE_DOMAIN_REMOTE=crux-passkey-server-8sdh7f6w.fermyon.app # Change this to your own domain Crie um certificado SSL (preferencialmente emitido por uma CA confiável) e chave e coloque -os no diretório certs . Os nomes de arquivos devem ser cert.pem e key.pem . Você pode seguir as instruções aqui (pode ser necessário adicionar a CA à loja de confiança do seu navegador-ou confiar nelas no Keychain no macOS-Spin 2.0 Frashes no uso de certificados autoassinados)
Inicie o servidor de spin local:
./run.shE então abra seu navegador em https: // localhost
Ou publique em Fermyon Cloud (você precisará ter uma conta de Fermyon e instalar a CLI de Fermyon):
./cloud_create_db.sh # Only need to do this once
./deploy.shE então abra seu navegador em https://crux-sasskey-sever-8sdh7f6w.fermyon.app (ou qualquer que seja o seu domínio)

O diagrama acima mostra o processo de registro.
O usuário insere seu endereço de e -mail e clica em "Registrar" (Web) ou "Inscreva -se" (aplicativo iOS).
O aplicativo auth , através do evento GetCreationChallenge e do recurso crux_http , envia uma solicitação POST para o back -end.
O back -end responde com um objeto PublicKeyCredentialCreationOptions , através do evento CreationChallenge .
Para o aplicativo iOS, isso é aprovado, através da capacidade passkey , para o lado iOS-shell da implementação da capacidade passkey , que usa um ASAuthorizationController para levar o usuário a criar uma pasta.
Para o shell da web, isso é passado, através da capacidade passkey , para o Método navigator.credentials.create do navegador pelo lado da Web-shell da implementação da capacidade passkey , que leva ao usuário a criar uma passagem de passagem.
O usuário cria um recurso Passkey e a passkey retorna um objeto RegisterPublicKeyCredential , através do evento RegisterCredential , que contém a chave pública, o desafio assinado e outras informações.
O evento RequestCredential é tratado pelo aplicativo, enviando uma solicitação POST , através do recurso crux_http , para o back -end com o objeto RegisterPublicKeyCredential .
O back -end verifica as informações e registra o usuário armazenando a chave pública do usuário em seu banco de dados, respondendo com um código de status 201 Created .
O evento CredentialRegistered é tratado pelo aplicativo, que atualiza seu estado para indicar que o usuário está registrado.

O usuário insere seu endereço de e -mail e clica em "Login" (Web) ou "Entrar" (aplicativo iOS).
O aplicativo auth , através do evento GetRequestChallenge e do recurso crux_http , envia uma solicitação POST para o back -end.
O back -end responde com um objeto PublicKeyCredentialRequestOptions , através do evento RequestChallenge .
Para o aplicativo iOS, isso é aprovado, através da capacidade passkey , para o lado iOS-Shell da implementação da capacidade passkey , que usa um ASAuthorizationController para levar o usuário a fazer o login com sua pasta passada.
Para o shell da web, isso é passado, através da capacidade passkey , para o método navigator.credentials.get do navegador pelo lado da Web-shell da implementação da capacidade passkey , que leva o usuário a fazer login com sua pasta passada.
O usuário insere sua sequência e a capacidade passkey retorna um objeto PublicKeyCredential , através do evento Credential , que contém o desafio assinado e outras informações.
O evento RequestCredential é tratado pelo aplicativo, enviando uma solicitação POST , através do recurso crux_http , para o back -end com o objeto PublicKeyCredential .
O back -end verifica as informações e responde com um código de status 200 OK .
O evento CredentialVerified é tratado pelo aplicativo, que atualiza seu estado para indicar que o usuário está conectado.
O diretório shared contém o núcleo da implementação. É um exemplo de um aplicativo Root Crux que aninha um aplicativo auth Crux. O aplicativo auth orquestra os recursos crux_http e passkey para fornecer a funcionalidade de registro e login da Passkey em relação ao back -end.