sgcIndy XOAuth2 Delphi

· Componentes

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:


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: 

  1. Username
  2. OAuth2 Client Id
  3. OAuth2 Client Secret
  4. Dirección de destino del email
});