Kerberos ve Negotiate kimlik doğrulama

Destekleyen

TsgcWebSocketServer

TsgcWebSocketHTTPServer

TsgcWebSocketProxyServer

TsgcWebSocketServer_HTTPAPI

*sgcWebSockets Enterprise Edition gerektirir. Diğer sürümlerde, Negotiate etkinleştirilmiş bir sunucuyu başlatmak "Negotiate authentication requires sgcWebSockets Enterprise" istisnasını oluşturur.

Genel Bakış

Negotiate, Windows tümleşik kimlik doğrulamasının arkasındaki HTTP kimlik doğrulama şemasıdır. İstemci kimliğini Kerberos (SPNEGO) ile veya Windows'ta NTLM yedeğiyle kanıtlar; böylece bir etki alanında zaten oturum açmış kullanıcılar parola yazmadan bağlanır. Intranet bölgesindeki tarayıcılar, curl --negotiate ve varsayılan kimlik bilgilerini kullanan .NET istemcileri bu doğrulama isteğini (challenge) yanıtlayabilir.

Platformlar

Özellikler ve olay

Örnek

Aşağıdaki sunucu yalnızca iki principal'ı kabul eder. Olay, erişimi principal adına göre kısıtlar.


uses
  sgcWebSocket, sgcWebSocket_Classes;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    oServer: TsgcWebSocketHTTPServer;
    procedure OnNegotiateAuthenticationEvent(Connection: TsgcWSConnection;
      const aPrincipal: String; var Authenticated: Boolean);
  end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  oServer := TsgcWebSocketHTTPServer.Create(Self);
  oServer.Port := 8080;
  oServer.Authentication.Enabled := True;
  oServer.Authentication.Negotiate.Enabled := True;
  oServer.Authentication.Negotiate.ServicePrincipal :=
    'HTTP/host.example.com@EXAMPLE.COM';
  oServer.OnNegotiateAuthentication := OnNegotiateAuthenticationEvent;
  oServer.Active := True;
end;

procedure TForm1.OnNegotiateAuthenticationEvent(Connection: TsgcWSConnection;
  const aPrincipal: String; var Authenticated: Boolean);
begin
  Authenticated := SameText(aPrincipal, 'EXAMPLE\alice') or
    SameText(aPrincipal, 'EXAMPLE\bob');
end;

Linux'ta Authentication.Negotiate.Keytab özelliğini keytab dosyasının yoluna ayarlayın, örneğin /etc/sgc/http.keytab, ve olayda alice@EXAMPLE.COM gibi bir Kerberos principal'ı kullanın.

Değişim nasıl çalışır

curl ile test

curl --negotiate -u : http://host.example.com:8080/

Kurulum notları