Desde sgcIndy 2024.5.0 el mecanismo de autenticación XOAuth2 es compatible. El mecanismo SASL XOAUTH2 se usa con los comandos IMAP AUTHENTICATE, POP AUTH y SMTP AUTH. Este mecanismo permite el uso de Access Tokens OAuth 2.0 para autenticarse, por ejemplo, en una cuenta de Gmail de un usuario.
TIdSASLXOAuth2
TIdSASLXOAuth2 tiene el evento OnAuthenticate, que se llama antes de realizar la autorización. El evento tiene 2 parámetros:
- Username: el nombre de usuario de la cuenta que envía el email
- Token: el token OAuth2. Debe obtenerse usando cualquier componente de terceros como TsgcHTTP_OAuth2_Client de la librería sgcWebSockets.
Si quieres enviar un email usando el componente TIdSMTP, simplemente añade el componente TIdSASLXOAuth2 como un nuevo SASLMechanism.
xOAuth2 := TIdSASLXOAUTH2.Create(nil); smtp := TIdSMTP.Create(nil); ... smtp.AuthType := satSASL; smtp.SASLMechanisms.Clear; smtp.SASLMechanisms.Add.SASL := xoauth2;
Después de configurar los componentes SMTP y XOAuth2, envía un email usando el componente SMTP y, cuando se requiera la autorización, se llamará al evento OnAuthenticate. Establece aquí el Username y el Access Token.
procedure OnXOAuth2Authenticate(Sender: TObject; var Username,
Token: string);
begin
Token := 'OAuth2 Access Token';
Username := 'your mail account';
end;
OAuth2 Client
El Access Token OAuth2 se puede obtener usando TsgcHTTP_OAuth2_Client de la librería sgcWebSockets.
A continuación encontrarás un ejemplo de cómo configurar el cliente OAuth2 para obtener un Access Token OAuth2 desde tu cuenta de usuario de Google.
OAuth2 := TsgcHTTP_OAuth2_Client.Create(nil);
OAuth2.OnAfterAccessToken := OnOAuth2AfterAccessTokenEvent;
OAuth2.OAuth2Options.GrantType := auth2CodePKCE;
OAuth2.LocalServerOptions.IP := '127.0.0.1';
OAuth2.LocalServerOptions.Port := 0;
OAuth2.AuthorizationServerOptions.AuthURL := 'https://accounts.google.com/o/oauth2/auth';
OAuth2.AuthorizationServerOptions.TokenURL := 'https://accounts.google.com/o/oauth2/token';
OAuth2.AuthorizationServerOptions.Scope.Text := 'https://mail.google.com/';
OAuth2.OAuth2Options.ClientId := '<your oauth2 client id>';
OAuth2.OAuth2Options.ClientSecret := '<your oauth2 client secret>';
OAuth2.Start;
procedure OnOAuth2AfterAccessTokenEvent(Sender: TObject; const
Access_Token, Token_Type, Expires_In, Refresh_Token, Scope, RawParams:
String; var Handled: Boolean);
begin
ShowMessage(Access_Token);
end;
Demo Delphi de XOAuth2
A continuación encontrarás una demo que muestra el componente XOAuth2 junto con el OAuth2 Client de la librería sgcWebSockets para enviar un email usando el protocolo SMTP. Selecciona la pestaña XOAuth2 para usar este tipo de autenticación y rellena los campos:
- Username
- OAuth2 Client Id
- OAuth2 Client Secret
- Dirección de destino del email
