sgcWebSockets 2022.3.0'dan itibaren, sunucunuzun aldığı İstekleri Kimlik Doğrulamak için harici OAuth2 Sağlayıcıları kullanabilirsiniz.
OAuth2 Server Provider Bileşeni, sunucu bileşeninize (bir HTTP sunucusu gibi) Harici OAuth2 Sağlayıcıları (Azure AD, Google, Facebook gibi...) entegre etmenize olanak tanır; böylece bir kullanıcı Azure AD kimlik bilgileriyle oturum açabilir ve kimlik doğrulama başarılı olursa HTTP sunucusu korunan kaynaklara erişim sağlayabilir.
OAuth2 Server Provider Akışı
OAuth2 Provider Server Bileşeni, sunucunuzun korunan kaynaklarına erişmek için Harici bir OAuth2 Sağlayıcısı (Azure AD, Google gibi...) kullanarak Kimlik Doğrulaması yapmanıza olanak tanır. Örnek: HTTP Sunucunuzu yapılandırabilir ve kullanıcılarınızın Azure kimlik bilgileriyle oturum açmasına izin verebilirsiniz; böylece oturum açma başarılı olursa bu kullanıcıların sunucunuzun korunan kaynaklarına girmesine izin verirsiniz.
Kimlik Doğrulama işlemi sunucu tarafından yapılır ve OAuth2 tokenları istemcilerle paylaşılmaz; bu, örneğin kullanıcı Azure kullanarak oturum açtığında, kimlik doğrulama başarılı olursa Azure'un kullanıcı profili, e-postaları... hakkında bazı bilgileri (kapsama bağlı olarak) almak için Azure sunucusuna istek göndermeye olanak tanıyan bir Access Token döndürmesi anlamına gelir. Bu Access Token, istemciyle (örneğin bir web tarayıcısı) PAYLAŞILMAZ; Access tokenını istemciye döndürmek yerine sunucu, dahili olarak Access Token ile ilişkilendirilmiş rastgele bir kimlik oluşturur; böylece İstemci (Web Tarayıcısı) her OAuth2 Sunucusuna çağrı yapmak istediğinde genel kimliği kullanır ve sunucu bu kimliği HTTP İsteklerini proxy'lemek için OAuth2 Access Tokenını almak amacıyla kullanır.
OAuth2 Kimlik Doğrulamasının nasıl çalıştığına dair bir örneği aşağıda bulabilirsiniz. Örnek, şu bağlantıda açıklanan Azure AD yapılandırmasını kullanacaktır: OAuth2 Provider Azure AD.
Sunucuyu Başlatın
Sunucu, localhost ve 443 numaralı bağlantı noktasında dinlemeye başlar. sgcWebSockets HTTP Sunucusu, OAuth2 Server Provider Bileşenine bağlıdır ve Authentication özelliği etkindir.
Sunucu başlatılmadan önce, Azure OAuth2 Sağlayıcısı aşağıdaki metot çağrısı kullanılarak kaydedilir.
RegisterProvider(
'azure',
'90945b8d-f6b7-4b97-b2bd-21c3c90b5f3x',
'PN67Q~5m06c-~X_GMyMf9zMntmm5l2dt~3jVq',
'https://login.microsoftonline.com/a0ca2055-5dd1-467f-bf13-291f6fd715c6/oauth2/v2.0/authorize',
'https://login.microsoftonline.com/a0ca2055-5dd1-467f-bf13-291f6fd715c6/oauth2/v2.0/token',
'user.read',
'/login',
'https://localhost/callback'
);
Kullanıcı Oturum Açar
Kullanıcı yeni bir web tarayıcısı açar ve '/login' uç noktasına gider.
Sunucu, '/login' uç noktasının Azure sağlayıcısı kullanılarak oturum açmak için kullanıldığını algılar ve şuraya yönlendirir:
https://login.microsoftonline.com/a0ca2055-5dd1-467f-bf13-291f6fd715c6/oauth2/v2.0/authorize
Ve OAuth2 kimlik doğrulama Akışı Başlar.
OAuth2 Kimlik Doğrulaması
Kullanıcı OAuth2 Sunucusu Kimlik Doğrulama Uç Noktasına yönlendirilir, şimdi kimlik bilgilerini kullanarak oturum açmalı ve OAuth2 Uygulamasının koşullarını kabul etmelidir.
Yetkilendirme başarılı olursa, Azure AD url'ye bir Kod gönderir
https://localhost/callback
OAuth2 Kodunu Doğrulayın
Şimdi, sunucu Azure'dan bir kod aldı ve bu tokenın doğru olduğunu doğrulamak (ve birinin sunucuyu hacklemeye çalışmasını önlemek) için Azure'a dahili bir bağlantı (sunucudan sunucuya) yapacaktır.
Sunucu şuraya bağlanır:
https://login.microsoftonline.com/a0ca2055-5dd1-467f-bf13-291f6fd715c6/oauth2/v2.0/token
Alınan kod ve clientsecret gibi bazı parametreleri geçirerek, doğrulama başarılı olursa Azure, profili okuma, e-posta... gibi Azure Korunan Kaynaklarına erişmek için kullanılabilecek Access Tokenını döndürür.
Başarılı Access Token
Sunucu başarılı bir AccessToken aldığında OnOAuth2ProviderTokenValid olayı çağrılır; böylece burada TsgcHTTPOAuth2ProviderToken parametre sınıfına erişerek AccessToken'ın nasıl depolanacağını (depolanıyorsa) yapılandırabilirsiniz
AccesToken: Azure tarafından döndürülen OAuth2 Tokenıdır
ID: çerez olarak depolanan genel tanımlayıcıdır.
Bu olayda, başarılı bir kimlik doğrulamasından sonra ne yapılacağını yapılandırabilirsiniz, örnek: kullanıcıyı özel url'ye yönlendirmek isterseniz aşağıdakini kullanın
Response.Redirect.URL := 'https://localhost/private';
Azure'a İstek Gönderin
Şimdi, çerez olarak depolanan Genel Kimliği kullanarak Azure sunucusuna istek gönderebilirsiniz.
Örnek: profil verilerini okumak isterseniz aşağıdaki metodu kullanın.
Get('ID', 'https://graph.microsoft.com/v1.0/me');
Burada ID genel kimlik tanımlayıcısıdır.
