Auth
TsgcHTMLAuth: bir sgcHTML uygulaması için sunucu tarafı oturumlar, oturum açma durumu ve CSRF koruması, Delphi, C++ Builder ve .NET'te.
TsgcHTMLAuth: bir sgcHTML uygulaması için sunucu tarafı oturumlar, oturum açma durumu ve CSRF koruması, Delphi, C++ Builder ve .NET'te.
Her isteğin oturum çerezini, oturum açmış kullanıcısını ve CSRF belirtecini yöneten görsel olmayan bir bileşen. Bir oturum deposu atayın, parolayı denetlemek için OnAuthenticate olayını işleyin, HTMX motorunun Auth özelliğini ayarlayın ve rotaları RequireLogin ile işaretleyin. sgcHTML'in bir parçasıdır ve sgcHTML bağımsız, tek başına bir paket olarak satılır.
TsgcHTMLAuth, TsgcHTMLSessionStore_Memory, TsgcHTMLSessionStore_File ve TsgcHTMLSession ile birlikte (sgcHTML_Auth ve sgcHTML_Session birimleri)
İşaretleme yok: oturum çerezleri, CSRF belirteçleri ve oturum açma yönlendirmeleri
Delphi, C++ Builder, .NET
Bir oturum deposu atayın, OnAuthenticate olayını işleyin, motorda Auth özelliğini ayarlayın ve korunacak rotaları işaretleyin. Bundan sonra motor her isteğin oturumunu okur, CSRF belirtecini denetler ve anonim kullanıcıları LoginPath adresine yönlendirir.
uses
sgcHTML_Session, sgcHTML_Auth, sgcHTMX_Router, sgcHTMX_Engine_Server;
// oHTMX is a TsgcHTMX_Engine_Server, oRouter is a TsgcHTMX_Router
var
oStore: TsgcHTMLSessionStore_Memory;
oAuth: TsgcHTMLAuth;
oRoute: TsgcHTMX_Route;
begin
oStore := TsgcHTMLSessionStore_Memory.Create(Self);
oStore.SweepInterval := 60;
oAuth := TsgcHTMLAuth.Create(Self);
oAuth.SessionStore := oStore;
oAuth.IdleTimeout := 1800; // seconds without a request
oAuth.AbsoluteTimeout := 43200; // seconds since sign-in
oAuth.LoginRateLimit.MaxAttempts := 5;
oAuth.OnAuthenticate := AuthAuthenticate;
oHTMX.Auth := oAuth;
// only a signed-in user reaches /orders
oRoute := oRouter.Routes.Add;
oRoute.Path := '/orders';
oRoute.RequireLogin := True;
oRoute.OnRoute := OrdersRoute;
// only a session with one of these roles reaches /admin
oRoute := oRouter.Routes.Add;
oRoute.Path := '/admin';
oRoute.RequireRoles := 'admin,manager';
oRoute.OnRoute := AdminRoute;
end;
procedure TForm1.AuthAuthenticate(Sender: TObject;
const aUser, aPassword: string; var aAccept: Boolean;
var aUserID, aDisplayName: string; const aRoles: TStrings);
begin
// LoadPasswordHash reads the value stored when the user was created
aAccept := sgcHTMLPasswordVerify(aPassword, LoadPasswordHash(aUser));
if aAccept then
begin
aUserID := aUser;
aDisplayName := aUser;
aRoles.Add('admin');
end;
end;
// when you create a user, store this hash, never the password
vHash := sgcHTMLPasswordHash('secret');
// includes: sgcHTML_Session.hpp, sgcHTML_Auth.hpp, sgcHTMX_Router.hpp, sgcHTMX_Engine_Server.hpp
// oHTMX is a TsgcHTMX_Engine_Server, oRouter is a TsgcHTMX_Router
TsgcHTMLSessionStore_Memory *oStore = new TsgcHTMLSessionStore_Memory(this);
oStore->SweepInterval = 60;
TsgcHTMLAuth *oAuth = new TsgcHTMLAuth(this);
oAuth->SessionStore = oStore;
oAuth->IdleTimeout = 1800; // seconds without a request
oAuth->AbsoluteTimeout = 43200; // seconds since sign-in
oAuth->LoginRateLimit->MaxAttempts = 5;
oAuth->OnAuthenticate = AuthAuthenticate;
oHTMX->Auth = oAuth;
// only a signed-in user reaches /orders
TsgcHTMX_Route *oRoute = oRouter->Routes->Add();
oRoute->Path = "/orders";
oRoute->RequireLogin = true;
oRoute->OnRoute = OrdersRoute;
// only a session with one of these roles reaches /admin
oRoute = oRouter->Routes->Add();
oRoute->Path = "/admin";
oRoute->RequireRoles = "admin,manager";
oRoute->OnRoute = AdminRoute;
void __fastcall TForm1::AuthAuthenticate(TObject *Sender,
const UnicodeString aUser, const UnicodeString aPassword, bool &aAccept,
UnicodeString &aUserID, UnicodeString &aDisplayName, TStrings *const aRoles)
{
// LoadPasswordHash reads the value stored when the user was created
aAccept = sgcHTMLPasswordVerify(aPassword, LoadPasswordHash(aUser));
if (aAccept)
{
aUserID = aUser;
aDisplayName = aUser;
aRoles->Add("admin");
}
}
// when you create a user, store this hash, never the password
String hash = sgcHTMLPasswordHash("secret");
using esegece.sgcWebSockets;
// htmx is a TsgcHTMX_Engine_Server, router is a TsgcHTMX_Router
var store = new TsgcHTMLSessionStore_Memory();
store.SweepInterval = 60;
var auth = new TsgcHTMLAuth();
auth.SessionStore = store;
auth.IdleTimeout = 1800; // seconds without a request
auth.AbsoluteTimeout = 43200; // seconds since sign-in
auth.LoginRateLimit.MaxAttempts = 5;
auth.OnAuthenticate += AuthAuthenticate;
htmx.Auth = auth;
// only a signed-in user reaches /orders
var route = router.Routes.Add();
route.Path = "/orders";
route.RequireLogin = true;
route.OnRoute += OrdersRoute;
// only a session with one of these roles reaches /admin
route = router.Routes.Add();
route.Path = "/admin";
route.RequireRoles = "admin,manager";
route.OnRoute += AdminRoute;
void AuthAuthenticate(object sender, string aUser, string aPassword,
ref bool aAccept, ref string aUserID, ref string aDisplayName,
List<string> aRoles)
{
// LoadPasswordHash reads the value stored when the user was created
aAccept = sgcHTMLAuthHelpers.sgcHTMLPasswordVerify(aPassword, LoadPasswordHash(aUser));
if (aAccept)
{
aUserID = aUser;
aDisplayName = aUser;
aRoles.Add("admin");
}
}
// when you create a user, store this hash, never the password
string hash = sgcHTMLAuthHelpers.sgcHTMLPasswordHash("secret");
En sık başvurduğunuz üyeler.
CookieName (varsayılan sgcsid), CookiePath ve CookieDomain çerezi şekillendirir. CookieSecure ve CookieHttpOnly varsayılan olarak True değerindedir ve CookieSameSite değeri hssLax olur; diğer değerler hssStrict ve hssNone olup hssNone her zaman Secure ekler.
IdleTimeout (1800 saniye) kullanılmayan bir oturumu sonlandırır, AbsoluteTimeout (43200 saniye) ise etkinlik ne olursa olsun oturum açıldıktan o kadar süre sonra sonlandırır. 0 bu denetimlerden herhangi birini devre dışı bırakır. CurrentSession ikisini de doğrular ve her istekte oturumun son erişim zamanını yeniler.
CSRFProtection varsayılan olarak açıktır. Her oturum rastgele bir belirteç alır: IssueCSRF(session) onu döndürür, ValidateCSRF(session, token) ise sabit sürede karşılaştırır. Motor belirteci CSRFHeaderName üst bilgisinden (X-CSRF-Token) ya da CSRFFieldName alanından (csrf_token) okur ve belirteci taşımayan, durumu değiştiren bir isteğe 403 ile yanıt verir.
Oturum açılmış bir oturum için işlenen sayfa, head bölümünde <meta name="csrf-token"> ve <meta name="csrf-header"> taşır ve paketle gelen htmx betiği, GET, HEAD veya OPTIONS olmayan her istekte belirteci bu üst bilgi içinde gönderir. hx-post ve hx-delete için ek işaretleme gerekmez.
RememberMeDays (0 kapalı demektir, en fazla 3650) bunu açar ve RememberCookieName çerezin adını belirler (sgcrem). Bir isteğin geçerli bir oturumu yoksa ama geçerli bir belirteci varsa OnLoadUser kullanıcıyı yeniden yükler, yeni bir oturum verilir ve belirteç yenilenir. Depo yalnızca doğrulayıcının bir karmasını (hash) saklar.
LoginRateLimit bir TsgcHTMLAuthRateLimit_Options nesnesidir. Başarısız oturum açma denemeleri, WindowSeconds (300) süresi içinde istemci IP'si başına ve kullanıcı adı başına sayılır; MaxAttempts (5) değerine ulaşmak o IP'yi ya da kullanıcıyı LockoutSeconds (900) süreyle kilitler ve kilitliyken OnAuthenticate çağrılmaz. MaxAttempts = 0 sınırı devre dışı bırakır, IsLoginLocked(ip, user) ise bir kilidi bildirir.
sgcHTMLPasswordHash(password, iterations), varsayılan olarak rastgele 16 baytlık bir tuz ve 210000 yineleme ile pbkdf2-sha256$iterations$salt$hash döndürür. sgcHTMLPasswordVerify(password, hash) bir parolayı sabit sürede denetler ve biçimi bozuk bir karma için False döndürür.
TsgcHTMLSessionStore_Memory oturumları süreç içinde tutar ve arka planda temizlik için SweepInterval sunar; IdleTimeout ve AbsoluteTimeout değerlerini Auth bileşenindekilerle aynı tutun. TsgcHTMLSessionStore_File her oturum için Folder içine bir JSON dosyası yazar, böylece birkaç süreç onu paylaşabilir, ve bir dosyayı en fazla her TouchInterval saniyede (60) bir yeniden yazar. Her ikisi de iş parçacığı güvenlidir.
TsgcHTMLSession şunları tutar: ID, UserID, DisplayName, Roles, serbest Values (name=value), CSRFToken, CreatedAt, LastSeen, RemoteIP ve UserAgentHash, ayrıca HasRole. Bir rota onu TsgcHTMXRequest.Session olarak okur, anonimse nil olur. Depolar kopya verir, bu yüzden bir değişikliği kalıcı kılmak için SessionStore.Put çağırın.
Authenticate hız sınırını uygular ve OnAuthenticate olayını tetikler. SignIn her zaman yeni bir oturum kimliği oluşturur, eskisini siler ve yeni bir CSRF belirteci verir; bu, oturum sabitlemeye karşı koruma sağlar. SignOut bir oturumu sonlandırır, SignOutEverywhere(userID) ise bir kullanıcının tüm oturumlarını ve beni hatırla belirteçlerini sonlandırır. Motorun dışında, Admin CRUD demosunun yaptığı gibi CurrentSession(cookieHeader, remoteIP, userAgent, setCookies) yöntemini kendiniz çağırın.
Bir TsgcHTMX_Route öğesini RequireLogin ya da RequireRoles ile işaretleyin (virgülle ayrılmış, bir eşleşme yeterlidir). Anonim bir istek 302 ile LoginPath?next= adresine yönlendirilir, isteği htmx gönderdiyse 401 ile birlikte HX-Redirect alır; role sahip olmayan bir oturum 403 alır. Motor ayrıca LoginPath ve LogoutPath adreslerine gelen POST isteklerini yanıtlar, ardından AfterLoginPath adresine gider.
Bir ileti, WebSocket el sıkışmasında gönderilen çerezlerin oturumuyla çalışır; ancak bu el sıkışma aynı kaynaktan (origin) gelmiş olmalıdır. Diğer tüm iletiler anonimdir ve reddedilen bir ileti yanıt almaz. TsgcHTMX_Engine_Server.MessageSession(aConnection), OnHTMXMessage olayını kendisi yanıtlayan bir host için bir bağlantının arkasındaki oturumu döndürür ve onu serbest bırakma sorumluluğu çağıran koddadır.
| Çevrimiçi yardımBu bileşen için tam API referansı ve kullanım kılavuzu. | Aç | |
| Oturumlar ve kimlik doğrulama kılavuzuÇerezler, CSRF, rota geçitleri, beni hatırla ve oturum açma hız sınırı, adım adım. | Aç | |
| Tüm sgcHTML Bileşenleri80'den fazla bileşenin tam özellik matrisine göz atın. | Aç | |
| Ücretsiz Deneme Sürümünü İndirin30 günlük deneme sürümü, TsgcHTMLAuth üzerinden oturum açan 02.AdminCRUD dahil olmak üzere 60.HTML demo projelerini içerir. | Aç | |
| FiyatlandırmaTam kaynak kodlu Single, Team ve Site lisansları. | Aç |