sgcWebSockets 4.4.5 sürümünden itibaren OAuth2 protokolü Sunucu Bileşenlerinde desteklenir.
OAuth2, üçüncü taraf uygulamaların bir HTTP hizmetine, bir kaynak sahibi adına ya da bir üçüncü taraf uygulamasının kendi adına erişim sağlamasına izin vererek sınırlı erişim almasına olanak tanır. OAuth2 sayesinde, hizmet sağlayıcılar ve tüketici uygulamaları birbirleriyle güvenli bir şekilde etkileşim kurabilir.
TsgcHTTP_OAuth2_Server
Bu bileşen, Sunucu Tarafı Bileşenlerde OAuth2 protokolü uygulamasını sağlar.
Sunucu bileşenlerinin, bir TsgcHTTP_OAuth2_Server örneği atayabileceğiniz Authorization.OAuth.OAuth2 adında bir özelliği vardır; dolayısıyla Authentication etkinse ve OAuth2 özelliği OAuth2 Sunucu Bileşenine eklenmişse, WebSocket ve HTTP İsteklerinin işlenebilmesi için bir Bearer Token gerekir; aksi takdirde bağlantı otomatik olarak kapatılır.
Örnek
Bir TsgcWebSocketHTTPServer kullanarak basit bir OAuth2 sunucusu örneği yapalım.
Önce, 443 portunda dinleyen ve sgc.pem dosyasında kendinden imzalı bir sertifika kullanan yeni bir TsgcWebSocketHTTPServer oluşturun.
oServer := TsgcWebSocketHTTPServer.Create(nil); oServer.Port := 80; oServer.SSLOptions.Port := 443; oServer.SSLOptions.CertFile := 'sgc.pem'; oServer.SSLOptions.KeyFile := 'sgc.pem'; oServer.SSLOptions.RootCertFile := 'sgc.pem'; oServer.SSL := True;
Ardından TsgcHTTP_OAuth2_Server'ın yeni bir örneğini oluşturun ve daha önce oluşturulan sunucuya atayın.
Aşağıdaki değerlerle yeni bir Uygulama kaydedin:
Name: MyApp
RedirectURI: http://127.0.0.1:8080
ClientId: client-id
ClientSecret: client-secret
OAuth2 := TsgcHTTP_OAuth2_Server.Create(nil);
OAuth2.Apps.AddApp('MyApp', 'http://127.0.0.1:8080', 'client-id', 'client-secret');
oServer.Authentication.Enabled := True;
oServer.Authentication.OAuth.OAuth2 := OAuth2;
Ardından OAuth2 sunucu bileşeninin OnOAuth2Authentication olayını işleyin ve kullanıcıları oturum açmak için kendi metodunuzu uygulayın. Bir oturum açmayı kabul etmek için "user/secret" çiftini kullanacağım.Metninizi buraya girin ...
procedure OnAuth2Authentication(Connection: TsgcWSConnection; OAuth2: TsgcHTTPOAuth2Request; aUser, aPassword: string; var Authenticated: Boolean);
begin
if ((aUser = 'user') and (aPassword = 'secret')) then
Authenticated := True;
end;
Son olarak sunucuyu başlatın ve oturum açmak için bir OAuth2 istemcisi kullanın; örneğin sgcWebSockets kitaplığıyla birlikte gelen TsgcHTTP_OAuth2_Client'ı kullanabilirsiniz.

Yeni bir Access Token talep edin; yeni bir Web Tarayıcısı oturumu gösterilir ve kullanıcının önce bağlantıya İzin Vermesi, ardından oturum açması gerekir.

Oturum açma başarılı olursa istemciye yeni bir Token döndürülür. Ardından tüm isteklerin bu bearer token'ı HTTP Başlıklarında içermesi gerekir.

