Od wersji sgcIndy 2024.5.0 obsługiwany jest mechanizm uwierzytelniania XOAuth2. Mechanizm SASL XOAUTH2 jest przeznaczony do użycia z poleceniami IMAP AUTHENTICATE, POP AUTH i SMTP AUTH. Pozwala on na używanie tokenów dostępu OAuth 2.0 do uwierzytelniania się na koncie Gmail użytkownika.
TIdSASLXOAuth2
Komponent TIdSASLXOAuth2 posiada zdarzenie OnAuthenticate, które jest wywoływane przed wykonaniem autoryzacji. Zdarzenie ma 2 parametry:
- Username: nazwa użytkownika konta, które wysyła e-mail
- Token: token OAuth2. Należy go uzyskać za pomocą dowolnego komponentu, na przykład TsgcHTTP_OAuth2_Client z biblioteki sgcWebSockets.
Jeśli chcesz wysłać e-mail za pomocą komponentu TIdSMTP, po prostu dodaj komponent TIdSASLXOAuth2 jako nowy SASLMechanism.
xOAuth2 := TIdSASLXOAUTH2.Create(nil); smtp := TIdSMTP.Create(nil); ... smtp.AuthType := satSASL; smtp.SASLMechanisms.Clear; smtp.SASLMechanisms.Add.SASL := xoauth2;
Po skonfigurowaniu komponentów SMTP i XOAuth2 wyślij e-mail za pomocą komponentu SMTP. Gdy wymagana jest autoryzacja, wywoływane jest zdarzenie OnAuthenticate. W tym miejscu ustaw Username i Access Token.
procedure OnXOAuth2Authenticate(Sender: TObject; var Username,
Token: string);
begin
Token := 'OAuth2 Access Token';
Username := 'your mail account';
end;
Klient OAuth2
Token dostępu OAuth2 można uzyskać za pomocą TsgcHTTP_OAuth2_Client z biblioteki sgcWebSockets.
Poniżej znajdziesz przykład konfiguracji klienta OAuth2 w celu uzyskania tokenu dostępu OAuth2 dla konta 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 XOAuth2 dla Delphi
Poniżej znajdziesz demo pokazujące komponent XOAuth2 z klientem OAuth2 z biblioteki sgcWebSockets do wysyłania e-maili przez protokół SMTP. Wybierz zakładkę XOAuth2, aby użyć tego rodzaju uwierzytelniania i wypełnij pola:
- Nazwa użytkownika
- OAuth2 Client Id
- OAuth2 Client Secret
- Adres docelowy e-maila
