Bu bileşen, Sunucu Tarafı Bileşenlerde OAuth2 protokol uygulamasını sağlar.
Bu bileşen, Sunucu Tarafı Bileşenlerde OAuth2 protokol uygulamasını sağlar.
Sunucu bileşenleri, bir TsgcHTTP_OAuth2_Server örneği atayabileceğiniz Authorization.OAuth.OAuth2 adlı bir özelliğe sahiptir; bu nedenle Authentication etkinleştirilmiş ve OAuth2 özelliği OAuth2 Sunucu Bileşenine eklenmişse, WebSocket ve HTTP İstekleri işlenmek için bir Bearer Token gerektirir, aksi takdirde bağlantı otomatik olarak kapatılır.
OAuth2 := TsgcHTTP_OAuth2_Server.Create(nil);
Server.Authentication.Enabled := True;
Server.Authentication.OAuth.OAuth2 := OAuth2;
Sunucu aşağıdaki yetkilendirme türlerini destekler:
- auth2Code: Tek sayfalık uygulamalar, web uygulamaları ve yerel olarak yüklenen uygulamalar dahil olmak üzere uygulama türlerinin çoğunda kimlik doğrulama ve yetkilendirme gerçekleştirmek için kullanılır. Akış, uygulamaların güvenli kaynaklara erişmek için kullanılabilen access_token'ları güvenli bir şekilde edinmesini, ayrıca ek access_token'lar almak için refresh token'ları ve oturum açan kullanıcı için ID token'larını edinmesini sağlar.
- auth2ClientCredentials: Bu grant türü, bir kullanıcıyla anında etkileşim olmadan arka planda çalışması gereken sunucudan sunucuya etkileşimler için yaygın olarak kullanılır. Bu tür uygulamalara genellikle daemon'lar veya hizmet hesapları denir.
- password (Resource Owner Password Credentials): Bir uygulamanın kullanıcının kimlik bilgilerini doğrudan işleyerek oturum açmasına olanak tanır. İstemci, kullanıcının kullanıcı adını ve parolasını token uç noktasına gönderir.
- urn:ietf:params:oauth:grant-type:device_code (Device Code): RFC 8628'e göre Device Authorization Grant. Giriş kısıtlı cihazların (akıllı TV'ler, IoT cihazları), kullanıcının ikincil bir cihazda yetkilendirmesini sağlayarak kullanıcı yetkilendirmesi almasına olanak tanır.
Yetkilendirme türü, Uygulama kaydedilirken özelleştirilebilir; varsayılan olarak tüm yetkilendirme türleri desteklenir.
EndPoints
Varsayılan olarak, bileşen Authorization ve Token isteklerini işlemek için aşağıdaki uç noktalarla yapılandırılmıştır
Authorization: /sgc/oauth2/auth
Token: /sgc/oauth2/token
Revocation: /sgc/oauth2/revoke
Introspection: /sgc/oauth2/introspect
Device Authorization: /sgc/oauth2/device
Device Verification: /sgc/oauth2/device/verify
Yani sunucu 443 numaralı bağlantı noktasını dinliyorsa ve etki alanı www.esegece.com ise, EndPoints şöyle olacaktır:
Authorization: https://www.esegece.com/sgc/oauth2/auth
Token: https://www.esegece.com/sgc/oauth2/token
Revocation: https://www.esegece.com/sgc/oauth2/revoke
Introspection: https://www.esegece.com/sgc/oauth2/introspect
Device Authorization: https://www.esegece.com/sgc/oauth2/device
Device Verification: https://www.esegece.com/sgc/oauth2/device/verify
Uç noktalar OAuth2Options özelliğinde yapılandırılabilir.
Varsayılan olarak PKCE (CSRF ve yetkilendirme kodu enjeksiyon saldırılarını önlemek için Authorization Code akışına bir uzantıdır) etkindir.
Configuration
OAuth2 sürecine başlamadan önce, hangi Uygulamaların kullanılabilir olacağını kaydetmelisiniz; bu, OAuth2 sunucu bileşeninin Apps özelliği kullanılarak yapılır.
Uygulama Kaydet
OAuth2 sunucusuna yeni bir Uygulama eklemek için Apps.AddApp kullanın, aşağıdaki parametreleri ayarlamanız gerekir:
- App Name:
Uygulamanın adıdır. Örnek: MyApp
- RedirectURI:
yanıtların yönlendirileceği yerdir. Örnek: http://127.0.0.1:8080
- ClientId:
herkese açık bilgidir ve istemcinin ID'sidir.
- ClientSecret:
gizli tutulmalıdır.
İsteğe bağlı olarak aşağıdaki parametreleri ayarlayabilirsiniz:
- ExpiresIn:
varsayılan olarak 3600 saniyedir, bu nedenle token 1 saat içinde sona erer,
ihtiyacınız varsa daha büyük bir değer ayarlayabilirsiniz.
- RefreshToken:
varsayılan olarak refresh token'lar desteklenir, eğer değilse, bu parametreyi
false olarak ayarlayın.
- AllowedGrantTypes: varsayılan olarak tüm grant türleri desteklenir (auth2Code ve auth2ClientCredentials), ancak sunucu yalnızca Code Authorization'a veya yalnızca Client Credentials'a izin verecek şekilde yapılandırılabilir.
Delete App
Mevcut bir App'i silmek için Apps.RemoveApp'i kullanın.
AddToken
Bazı token'lar verilmişken sunucu yeniden başlatıldıysa, bu token'ları OAuth2 Sunucusunu başlatmadan önce ve Uygulamaları kaydettikten sonra AddToken yöntemini kullanarak kurtarabilirsiniz
- AppName: uygulamanın adı.
- Token: access token.
- Expires: token'ın ne zaman süresinin dolacağı.
- RefreshToken: refresh token.
RemoveToken
Zaten verilmiş bir Token'i kaldırır.
OAuth2Options
OAuth2Options özelliği, sunucu uç noktalarını ve isteğe bağlı özellikleri yapılandırmaya olanak tanır.
İptal
RFC 7009'a göre token iptali. Etkinleştirildiğinde, istemciler daha önce verilmiş erişim veya refresh token'larını iptal edebilir.
- OAuth2Options.Revocation.Enabled: revocation uç noktasını etkinleştirmek için True olarak ayarlayın.
- OAuth2Options.Revocation.URL: uç nokta URL yolu. Varsayılan: /sgc/oauth2/revoke
Introspection
RFC 7662 uyarınca token incelemesi (introspection). Etkinleştirildiğinde, kaynak sunucular bir token'ın etkin durumunu ve meta verilerini belirlemek için yetkilendirme sunucusunu sorgulayabilir.
- OAuth2Options.Introspection.Enabled: introspection uç noktasını etkinleştirmek için True olarak ayarlayın.
- OAuth2Options.Introspection.URL: endpoint URL yolu. Varsayılan: /sgc/oauth2/introspect
DeviceAuthorization
RFC 8628 uyarınca Device Authorization Grant. Etkinleştirildiğinde, giriş kısıtlamalı cihazlar, kullanıcının ikincil bir cihazda yetkilendirmesini sağlayarak yetkilendirme isteyebilir.
- OAuth2Options.DeviceAuthorization.Enabled: aygıt yetkilendirme uç noktasını etkinleştirmek için True olarak ayarlayın.
- OAuth2Options.DeviceAuthorization.URL: cihaz kodu istekleri için uç nokta URL yolu. Varsayılan: /sgc/oauth2/device
- OAuth2Options.DeviceAuthorization.VerificationURL: kullanıcı doğrulama sayfasının uç nokta URL yolu. Varsayılan: /sgc/oauth2/device/verify
- OAuth2Options.DeviceAuthorization.ExpiresIn: cihaz kodunun saniye cinsinden yaşam süresi. Varsayılan: 600 (10 dakika).
- OAuth2Options.DeviceAuthorization.Interval: istemcinin token uç noktasını yoklarken kullanması gereken saniye cinsinden minimum yoklama aralığı. Varsayılan: 5.