OAuth2 Sağlayıcı | Kimlik Doğrulama

OAuth2 Provider Server Bileşeni, sunucunuzun korunan kaynaklarına erişmek için harici bir OAuth2 sağlayıcısı (Azure AD veya Google gibi) kullanarak kimlik doğrulamanıza olanak tanır. Örnek: HTTP sunucunuzu, kullanıcıların Azure kimlik bilgilerini kullanarak oturum açmasına izin verecek şekilde yapılandırabilirsiniz; oturum açma başarılı olursa, bu kullanıcıların sunucunuzun korunan kaynaklarına erişmesine izin verilir.

 

Kimlik Doğrulama işlemi sunucu tarafından yapılır ve OAuth2 token'ları istemcilerle paylaşılmaz, bu da örneğin kullanıcı Azure kullanarak oturum açtığında, kimlik doğrulama başarılı olursa, Azure'ın kullanıcı profili, e-postaları hakkında (kapsama bağlı olarak) bazı bilgileri almak için Azure sunucusuna istekler göndermenize olanak tanıyan bir Access Token döndürdüğü anlamına gelir. Bu Access Token istemciyle (örneğin bir web tarayıcısı) PAYLAŞILMAZ, Access token'ı istemciye döndürmek yerine, sunucu Access Token ile dahili olarak bağlantılı rastgele bir ID oluşturur, böylece İstemci (Web Tarayıcısı) OAuth2 Sunucusuna her çağrı yapmak istediğinde genel ID'yi kullanır ve sunucu HTTP İsteklerini proxy'lemek için OAuth2 Access Token'ı almak üzere bu ID'yi kullanır.

 

OAuth2 Kimlik Doğrulamasının nasıl çalıştığına dair bir örneği aşağıda bulun. Örnek, aşağıdaki bağlantıda açıklanan Azure AD yapılandırmasını kullanacaktır OAuth2 Provider Azure AD.

 

Sunucuyu Başlatın

 

Sunucu, localhost ve port 443'te dinlemeye başlar. sgcWebSockets HTTP Server, OAuth2 Server Provider Bileşenine bağlıdır ve Authentication özelliği etkinleştirilmiştir.

Sunucu başlatılmadan önce, Azure OAuth2 Provider aşağıdaki yöntem ç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çmaları

 

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ını kullanarak oturum açmak için kullanıldığını algılar, bu nedenle ş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 Server Authentication Endpoint'e 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 Code 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 için (ve birinin sunucuyu hacklemeye çalışmasını önlemek için) Azure'a dahili bir bağlantı yapacaktır (sunucudan sunucuya).

 

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ı parametreler geçirilerek, doğrulama başarılı olursa, Azure profil okuma, e-posta gibi Azure Korumalı 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'in (varsa) nasıl saklanacağını yapılandırabilirsiniz

 

AccesToken: Azure tarafından döndürülen OAuth2 Token'idir

ID: bir çerez olarak saklanan genel tanımlayıcıdır.

 

Bu olayda, başarılı bir kimlik doğrulamadan 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önderme

 

Artık, çerez olarak saklanan Public ID'yi kullanarak Azure sunucusuna istek gönderebilirsiniz.

Örnek: profil verilerini okumak istiyorsanız, aşağıdaki yöntemi kullanın.

 

Get('ID', 'https://graph.microsoft.com/v1.0/me');

 

ID, genel ID tanımlayıcısıdır.