Auth

TsgcHTMLAuth: bir sgcHTML uygulaması için sunucu tarafı oturumlar, oturum açma durumu ve CSRF koruması, Delphi, C++ Builder ve .NET'te.

TsgcHTMLAuth

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.

Bileşen sınıfı

TsgcHTMLAuth, TsgcHTMLSessionStore_Memory, TsgcHTMLSessionStore_File ve TsgcHTMLSession ile birlikte (sgcHTML_Auth ve sgcHTML_Session birimleri)

İşler

İşaretleme yok: oturum çerezleri, CSRF belirteçleri ve oturum açma yönlendirmeleri

Diller

Delphi, C++ Builder, .NET

Bir depo oluşturun, Auth'u oluşturun, bir rotayı koruyun

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");

Temel özellikler & yöntemler

En sık başvurduğunuz üyeler.

Oturum çerezi

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.

Zaman aşımları

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.

CSRF belirteçleri

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.

htmx ile CSRF

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.

Beni hatırla

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.

Oturum açma hız sınırı

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.

Parolalar

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.

Oturum depoları

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.

Oturum

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.

Oturum açma ve kapatma

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.

Rota geçitleri

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.

WebSocket bağlantıları

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.

Keşfetmeye devam edin

Çevrimiçi yardımBu bileşen için tam API referansı ve kullanım kılavuzu.
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.
Tüm sgcHTML Bileşenleri80'den fazla bileşenin tam özellik matrisine göz atın.
Ü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.
FiyatlandırmaTam kaynak kodlu Single, Team ve Site lisansları.
En avantajlı seçenek: All-AccessTüm eSeGeCe ürünleri, Premium Destek dahil, yılda €1,059'dan itibaren.
All-Access fiyatlarına bakın

Başlamaya Hazır mısınız?

Ücretsiz deneme sürümünü indirin ve Delphi, C++ Builder ve .NET'te web arayüzleri oluşturmaya başlayın.