Destekleyen
*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.
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.
Authentication.Negotiate.Enabled (Boolean, varsayılan False): Negotiate'i etkinleştirir. Authentication.Enabled gerektirir.Authentication.Negotiate.ServicePrincipal (String): isteğe bağlı SPN, örneğin HTTP/host.example.com@EXAMPLE.COM. Boş olduğunda keytab içindeki veya makine hesabındaki herhangi bir anahtar kabul edilir. Yalnızca Indy sunucuları için geçerlidir, http.sys tarafından yok sayılır.Authentication.Negotiate.Keytab (String): yalnızca Linux, hizmet keytab dosyasının yolu. Boş olduğunda KRB5_KTNAME veya sistem varsayılanı kullanılır. Windows'ta ve http.sys tarafından yok sayılır.OnNegotiateAuthentication(Connection: TsgcWSConnection; const aPrincipal: String; var Authenticated: Boolean): Kerberos veya NTLM değişimi tamamlandığında tetiklenir. Authenticated True olarak gelir, bu nedenle işleyici yoksa Windows veya Kerberos tarafından doğrulanan her principal kabul edilir. Reddetmek için False yapın (istemci 401 alır). Principal, Windows'ta DOMAIN\user, Linux'ta user@REALM biçimindedir. Indy sunucularında sonradan TsgcWSConnectionServer(Connection).Authentication.User olarak okunabilir, AuthType = authNegotiate olur.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.
WWW-Authenticate: Negotiate ile birlikte 401 alır; Basic de etkinse Basic realm doğrulama isteği de eklenir.Authorization: Negotiate <token> ile yanıt verir.Authentication.AllowNonAuth True olduğunda kimlik bilgisi içermeyen bir istek anonim olarak kabul edilir, Negotiate belirteci taşıyan bir istek ise yine de doğrulanır.curl --negotiate -u : http://host.example.com:8080/
HTTP/host SPN'ine ihtiyacı vardır. Tarayıcılar Negotiate'i yalnızca intranet bölgesindeki veya izin verilen listelerdeki sitelere gönderir.Keytab özelliğini ona yönlendirin.