A tela de login é a única parte de uma aplicação empresarial sobre a qual todo cliente tem uma opinião. Podemos entrar com nossa conta Entra ID? Ela suporta passkeys? Nossos auditores querem dois fatores. Nossos usuários estão no Active Directory, por que precisam de outra senha? E o e-mail que sua aplicação envia parou de funcionar no dia em que o Microsoft 365 recusou a senha nas configurações SMTP.
Cada uma dessas perguntas é um protocolo com sua própria especificação, seu próprio XML ou ASN.1, e suas próprias formas de ficar quase certo. Os novos componentes de autenticação empresarial respondem a elas como componentes Delphi. Fazem parte das edições Enterprise e All-Access do sgcWebSockets e do pacote sgcAuth, e os mesmos componentes também fazem parte do sgcWebSockets .NET.
Passkeys, do jeito que os usuários esperam
O servidor WebAuthn agora cobre o que as pessoas realmente querem dizer quando falam de passkeys:
- Login sem nome de usuário. O usuário pressiona um botão, o navegador oferece os passkeys que tem salvos para o seu site, e a conta é identificada pela credencial. Nada para digitar.
- Preenchimento automático. Os passkeys aparecem na própria lista de sugestões do navegador no campo de nome de usuário, ao lado das senhas salvas, para que uma página de login possa oferecer os dois enquanto os usuários fazem a transição.
- Vários passkeys por usuário. Um no celular, um no notebook, uma chave física na gaveta para o dia em que os dois se perderem.
- Detecção de passkeys sincronizados. O servidor identifica se um passkey é copiado em backup e sincronizado pela plataforma ou vinculado a um único dispositivo, para que sua política possa tratá-los de forma diferente.
- Seu próprio banco de dados. Os passkeys ficam junto da sua tabela de usuários, não em um arquivo controlado pelo componente.
Single Sign-On SAML
Grandes clientes não querem que sua equipe tenha uma conta na sua aplicação. Eles querem entrar com o provedor de identidade que a empresa já usa. TsgcSAMLServiceProvider transforma sua aplicação em um provedor de serviços SAML 2.0 para Entra ID, Okta, AD FS, Google Workspace e Keycloak. O provedor de identidade cuida do login, sua aplicação recebe uma asserção, e a assinatura dessa asserção é validada antes mesmo de você ver um nome de usuário.
Login no Active Directory e LDAP
Para a aplicação que roda dentro da rede da empresa, os usuários já têm uma senha: a do Windows. TsgcLDAPClient verifica um nome de usuário e senha contra o Active Directory ou qualquer diretório LDAP, via LDAPS ou StartTLS, para que a senha nunca atravesse a rede em texto claro. Defina Security como ldapsecLDAPS ou ldapsecStartTLS e chame Authenticate.
Saber quem é o usuário responde só metade da pergunta. GetUserGroups retorna os grupos aos quais a conta pertence, incluindo grupos aninhados, para que “este usuário é um aprovador de faturas” seja uma única chamada em vez de uma busca recursiva que você mesmo precisa escrever e depurar.
Códigos de dois fatores de um aplicativo autenticador
TsgcTOTPAuthenticator gera e verifica os códigos de seis dígitos do Google Authenticator, Microsoft Authenticator e qualquer outro aplicativo TOTP. O cadastro consiste em um segredo e uma URI que você exibe como um código QR. O login é uma única chamada:
uses
sgcAuth_TOTP, sgcBase_Helpers;
var
oTOTP: TsgcTOTPAuthenticator;
vSecret, vURI: string;
vLastStep: Int64;
begin
oTOTP := TsgcTOTPAuthenticator.Create(nil);
try
oTOTP.Issuer := 'MyApp';
// enrolment: store vSecret with the user, show vURI as a QR code
vSecret := oTOTP.GenerateSecret;
vURI := oTOTP.GetProvisioningURI('john@example.com', vSecret);
// sign-in: vLastStep is the last step accepted for this user, -1 the first time
vLastStep := -1;
if oTOTP.VerifyCode(vSecret, txtCode.Text,
StrToInt64(GetDateTimeUnix(Now)), vLastStep) then
ShowMessage('Signed in') // save vLastStep, this code is now spent
else
ShowMessage('Wrong, expired or already used');
finally
oTOTP.Free;
end;
end;
Essa sobrecarga é a proteção contra repetição: um código que já foi aceito é recusado, mesmo dentro dos seus próprios trinta segundos, para que um código lido por cima do ombro de alguém não valha nada depois de usado. Para o dia em que o celular for perdido, GenerateRecoveryCodes preenche uma lista com códigos de recuperação de uso único. Guarde-os do jeito que você guarda senhas.
Login com OpenID Connect
TsgcHTTP_OIDC_Client autentica usuários com qualquer provedor OpenID Connect. Ele lê o documento de descoberta do provedor, para que a configuração seja uma URL de emissor e um ID de cliente em vez de uma lista de endpoints copiada à mão. Ele valida o token de ID recebido, e as mesmas chaves de assinatura validam os tokens de portador que chegam à sua própria API REST, incluindo tokens de aplicações multilocatárias do Entra ID, em que cada locatário de cliente assina com seu próprio emissor.
OAuth2 para o e-mail do Microsoft 365 e Gmail
O Microsoft 365 e o Gmail esperam OAuth2, não uma senha, de SMTP, IMAP e POP3. TsgcMailOAuth2 obtém o token de acesso, o renova e constrói a string XOAUTH2 com a qual sua sessão SMTP, IMAP ou POP3 faz login. Escolha o provedor e os protocolos, informe seu ID de cliente, e guarde o token de atualização quando OnTokensChanged disparar. Um serviço ou aplicativo de console sem navegador pode usar o fluxo de código de dispositivo.
Experimente as demos
Cada componente tem uma demo executável em Demos\26.Authentication:
01.Passkeys, login sem nome de usuário e preenchimento automático no navegador.02.TOTP, cadastro com código QR, verificação e códigos de recuperação.03.SAML_ServiceProvider, single sign-on com seu provedor de identidade.04.OpenID_Connect, login e validação de tokens.05.LDAP_ActiveDirectory, login e associação a grupos.06.Mail_OAuth2, envio de e-mail pelo Microsoft 365 ou Gmail com OAuth2.
Documentação
- Passkeys
- TsgcSAMLServiceProvider
- TsgcLDAPClient
- TsgcTOTPAuthenticator
- TsgcHTTP_OIDC_Client
- TsgcMailOAuth2
Onde conseguir
Os componentes estão incluídos nas edições Enterprise e All-Access do sgcWebSockets, para Delphi, C++ Builder e .NET. Se você só precisa de autenticação, o pacote sgcAuth os oferece separadamente. Eles são aditivos: nada muda em uma aplicação existente até você arrastar um deles para um formulário.
Leia também
Assista ao vídeo
Há um vídeo curto, “Delphi login with passkeys, SAML SSO, Active Directory LDAP and TOTP 2FA”, no canal da eSeGeCe.
Dúvidas, feedback ou ajuda para integrar isso à sua página de login? Entre em contato. Você receberá uma resposta das pessoas que escreveram o código.
