AcceptSecurityContext-Funktion (Kerberos)

Mit der AcceptSecurityContext-Funktion (Kerberos) kann die Serverkomponente einer Transportanwendung einen Sicherheitskontext zwischen dem Server und einem Remoteclient einrichten. Der Remoteclient verwendet die InitializeSecurityContext-Funktion (Kerberos), um den Prozess zum Einrichten eines Sicherheitskontexts zu starten. Der Server kann mindestens ein Antworttoken vom Remoteclient benötigen, um die Einrichtung des Sicherheitskontexts abschließen zu können.

Syntax

SECURITY_STATUS SEC_Entry AcceptSecurityContext(
  _In_opt_    PCredHandle    phCredential,
  _In_opt_    PCtxtHandle    phContext,
  _In_opt_    PSecBufferDesc pInput,
  _In_        ULONG          fContextReq,
  _In_        ULONG          TargetDataRep,
  _Inout_opt_ PCtxtHandle    phNewContext,
  _Inout_opt_ PSecBufferDesc pOutput,
  _Out_       PULONG         pfContextAttr,
  _Out_opt_   PTimeStamp     ptsExpiry
);

Parameter

phCredential [ in, optional]

Ein Handle für die Anmeldeinformationen des Servers. Der Server ruft die AcquireCredentialsHandle (Kerberos)-Funktion auf, bei der entweder das _ SECPKG CRED _ INBOUND- oder SECPKG CRED BOTH-Flag festgelegt ist, um dieses Handle _ _ abzurufen.

phContext [ in, out, optional]

Ein Zeiger auf eine CTXTHandle-Struktur. Beim ersten Aufruf von AcceptSecurityContext (Kerberos) ist dieser Zeiger NULL. Bei nachfolgenden Aufrufen ist phContext das Handle für den teilweise gebildeten Kontext, der vom ersten Aufruf im phNewContext-Parameter zurückgegeben wurde.

pInput [ in, optional]

Ein Zeiger auf eine SecBufferDesc-Struktur, die durch einen Clientaufruf von InitializeSecurityContext (Kerberos) generiert wird, der den Eingabepufferdeskriptor enthält.

Kanalbindungsinformationen können durch Übergeben einer SecBuffer-Struktur vom Typ SECBUFFER _ CHANNEL _ BINDINGS zusätzlich zu den Puffern angegeben werden, die durch den Aufruf der InitializeSecurityContext (General)-Funktion generiert werden. Die Kanalbindungsinformationen für den Kanalbindungspuffer können durch Aufrufen der QueryContextAttributes-Funktion (Schannel) im Schannel-Kontext abgerufen werden, den der Client zur Authentifizierung verwendet.

fContextReq [ In]

Bitflags, die die Attribute angeben, die der Server zum Einrichten des Kontexts benötigt. Bitflags können mithilfe bitweiser OR-Vorgänge kombiniert werden. Dieser Parameter kann einen oder mehrere der folgenden Werte sein.

Wert Bedeutung
ASC _ _ REQ-VERTRAULICHKEIT
Verschlüsseln und Entschlüsseln von Nachrichten.
ASC _ _ REQ-VERBINDUNG
Der Sicherheitskontext verarbeitet keine Formatierungsmeldungen.
_ASC-REQ-DELEGAT _
Der Server darf die Identität des Clients imitieren. Gültig für Kerberos. Ignorieren Sie dieses Flag für die eingeschränkte Delegierung.
ERWEITERTER ASC _ _ _ REQ-FEHLER
Wenn Fehler auftreten, wird die Remote-Partei benachrichtigt.
ASC _ _ REQ-INTEGRITÄT
Signieren von Nachrichten und Überprüfen von Signaturen.
ASC _ REQ _ REPLAY _ DETECT
Erkennen von wiedergegebenen Paketen.
ASC _ REQ _ SEQUENCE _ DETECT
Erkennen von Nachrichten, die nicht sequenziert empfangen werden.

Mögliche Attributflags und deren Bedeutung finden Sie unter Kontextanforderungen. Flags, die für diesen Parameter verwendet werden, haben das Präfix ASC REQ, z. B. _ ASC _ REQ _ DELEGATE.

Die angeforderten Attribute werden vom Client möglicherweise nicht unterstützt. Weitere Informationen finden Sie unter dem parameter pfContextAttr.

TargetDataRep [ In]

Die Datendarstellung, z. B. die Byte reihenfolge, auf dem Ziel. Dieser Parameter kann entweder SECURITY _ NATIVE _ DREP oder SECURITY _ NETWORK _ DREP sein.

phNewContext [ in, out, optional]

Ein Zeiger auf eine CTXTHandle-Struktur. Beim ersten Aufruf von AcceptSecurityContext (Kerberos) empfängt dieser Zeiger das neue Kontexthand handle. Bei nachfolgenden Aufrufen kann phNewContext mit dem im phContext-Parameter angegebenen Handle identisch sein.

pOutput [ in, out, optional]

Ein Zeiger auf eine SecBufferDesc-Struktur, die den Ausgabepufferdeskriptor enthält. Dieser Puffer wird zur Eingabe in zusätzliche Aufrufe von InitializeSecurityContext (Kerberos) an den Client gesendet. Ein Ausgabepuffer kann auch dann generiert werden, wenn die Funktion SEC _ E _ OK zurückgibt. Alle generierten Puffer müssen zurück an die Clientanwendung gesendet werden.

pfContextAttr [ out]

Ein Zeiger auf eine Variable, die einen Satz von Bitflags empfängt, die die Attribute des eingerichteten Kontexts angeben. Eine Beschreibung der verschiedenen Attribute finden Sie unter Kontextanforderungen. Flags, die für diesen Parameter verwendet werden, haben das Präfix ASC RET, z. _ B. ASC _ RET _ DELEGATE.

Überprüfen Sie erst nach sicherheitsbezogenen Attributen, wenn der letzte Funktionsaufruf erfolgreich zurückgegeben wird. Attributflags, die sich nicht auf die Sicherheit bezieht, z. B. das ASC _ RET ALLOCATED MEMORY-Flag, können vor der _ _ endgültigen Rückgabe überprüft werden.

ptsTimeStamp [ out, optional]

Ein Zeiger auf eine TimeStamp-Struktur, die die Ablaufzeit des Kontexts empfängt. Es wird empfohlen, dass das Sicherheitspaket diesen Wert immer in Ortszeit zurück gibt.

Hinweis

Bis zum letzten Aufruf des Authentifizierungsprozesses kann die Ablaufzeit für den Kontext falsch sein, da in späteren Phasen der Aushandlung weitere Informationen bereitgestellt werden. Daher muss ptsTimeStamp bis zum letzten Aufruf der Funktion NULL sein.

Rückgabewert

Diese Funktion gibt einen der folgenden Werte zurück.

Rückgabecode/-wertBeschreibung
SEC_E_INSUFFICIENT_MEMORY
0x80090300L
Fehler bei der Funktion. Es ist nicht genügend Arbeitsspeicher verfügbar, um die angeforderte Aktion abschließen zu können.
SEC_E_INTERNAL_ERROR
0x80090304L
Fehler bei der Funktion. Es ist ein Fehler aufgetreten, der einem SSPI-Fehlercode nicht zuordnen konnte.
SEC_E_INVALID_HANDLE
0x80100003L
Fehler bei der Funktion. Das an die Funktion übergebene Handle ist ungültig.
SEC_E_INVALID_TOKEN
0x80090308L
Fehler bei der Funktion. Das an die Funktion übergebene Token ist ungültig.
SEC_E_LOGON_DENIED
0x8009030CL
Fehler bei der Anmeldung.
SEC_E_NO_AUTHENTICATING_AUTHORITY
0x80090311L
Fehler bei der Funktion. Es konnte keine Autorität für die Authentifizierung kontaktiert werden. Dies kann folgende Bedingungen haben:
  • Der Domänenname der authentifizierenden Partei ist falsch.
  • Die Domäne ist nicht verfügbar.
  • Die Vertrauensstellung ist fehlgeschlagen.
SEC_E_OK
0x00000000L
Die Funktion wurde erfolgreich ausgeführt. Der [*vom Client*](../secgloss/s-gly.md) empfangene Sicherheitskontext wurde akzeptiert. Wenn ein Ausgabetoken von der Funktion generiert wurde, muss es an den Clientprozess gesendet werden.
SEC_E_UNSUPPORTED_FUNCTION
0x80090302L
Fehler bei der Funktion. Ein ungültiges Kontextattributflag (ASC_REQ_DELEGATE oder ASC_REQ_PROMPT_FOR_CREDS) wurde im fContextReq-Parameter angegeben. Dieser Wert kann bei Verwendung des Schannel-SSP zurückgegeben werden.
SEC_I_COMPLETE_AND_CONTINUE
0x00090314L
Die Funktion wurde erfolgreich ausgeführt. Der Server muss [CompleteAuthToken](/windows/win32/api/sspi/nf-sspi-completeauthtoken) aufrufen und das Ausgabetoken an den Client übergeben. Der Server wartet dann auf ein Rückgabetoken vom Client und führt dann einen weiteren Aufruf von [AcceptSecurityContext (Kerberos)](acceptsecuritycontext--kerberos.md).
SEC_I_COMPLETE_NEEDED
0x00090313L
Die Funktion wurde erfolgreich ausgeführt. Der Server muss die Nachricht vom Client fertigstellen und dann die Funktion [CompleteAuthToken](/windows/win32/api/sspi/nf-sspi-completeauthtoken) aufrufen.
SEC_I_CONTINUE_NEEDED
0x00090312L
Die Funktion wurde erfolgreich ausgeführt. Der Server muss das Ausgabetoken an den Client senden und auf ein zurückgegebenes Token warten. Das zurückgegebene Token sollte in pInput für einen weiteren Aufruf von [AcceptSecurityContext (Kerberos)](acceptsecuritycontext--kerberos.md) übergeben werden.

Hinweise

Die AcceptSecurityContext-Funktion (Kerberos) ist das Serverent pendant zur InitializeSecurityContext(Kerberos)-Funktion.

Wenn der Server eine Anforderung von einem Client empfängt, verwendet der Server den Parameter fContextReq, um anzugeben, was für die Sitzung erforderlich ist. Auf diese Weise kann ein Server angeben, dass Clients in der Lage sein müssen, eine vertrauliche oder integritätsgeprüfte Sitzung zu verwenden, und Clients ablehnen, die diese Anforderung nicht erfüllen können. Alternativ kann ein Server nichts benötigen, und alles, was der Client bereitstellen oder erfordert, wird im parameter pfContextAttr zurückgegeben.

Für ein Paket, das mehrseitige Authentifizierung unterstützt, z. B. gegenseitige Authentifizierung, lautet die aufrufende Sequenz wie folgt:

  1. Der Client überträgt ein Token an den Server.
  2. Der Server ruft AcceptSecurityContext (Kerberos) zum ersten Mal auf, wodurch ein Antworttoken generiert wird, das dann an den Client gesendet wird.
  3. Der Client empfängt das Token und übergibt es an InitializeSecurityContext (Kerberos). Wenn InitializeSecurityContext (Kerberos) SEC E OK zurückgibt, wurde die gegenseitige Authentifizierung _ _ abgeschlossen, und eine sichere Sitzung kann beginnen. Wenn InitializeSecurityContext (Kerberos) einen Fehlercode zurückgibt, wird die gegenseitige Authentifizierungsaushandlung beendet. Andernfalls wird das von InitializeSecurityContext (Kerberos) zurückgegebene Sicherheitstoken an den Client gesendet, und die Schritte 2 und 3 werden wiederholt.

Die Parameter fContextReq und pfContextAttr sind Bitmasken, die verschiedene Kontextattribute darstellen. Eine Beschreibung der verschiedenen Attribute finden Sie unter Kontextanforderungen.

Hinweis

Der parameter pfContextAttr ist bei jeder erfolgreichen Rückgabe gültig, aber nur bei der endgültigen erfolgreichen Rückgabe sollten Sie die Flags im Zusammenhang mit Sicherheitsaspekten des Kontexts untersuchen. Zwischenrück rückgaben können z. B. das ISC _ RET _ ALLOCATED _ MEMORY-Flag festlegen.

Der Aufrufer ist dafür verantwortlich, zu bestimmen, ob die endgültigen Kontextattribute ausreichend sind. Wenn beispielsweise Vertraulichkeit (Verschlüsselung) angefordert wurde, aber nicht eingerichtet werden konnte, können einige Anwendungen die Verbindung sofort herunterfahren. Wenn der Sicherheitskontext nicht eingerichtet werden kann, muss der Server den teilweise erstellten Kontext durch Aufrufen der DeleteSecurityContext-Funktion frei geben. Informationen dazu, wann die DeleteSecurityContext-Funktion aufgerufen werden soll, finden Sie unter DeleteSecurityContext.

Nachdem der Sicherheitskontext eingerichtet wurde, kann die Serveranwendung die QuerySecurityContextToken-Funktion verwenden, um ein Handle für das Benutzerkonto abzurufen, dem das Clientzertifikat zugeordnet wurde. Außerdem kann der Server die ImpersonateSecurityContext-Funktion verwenden, um die Identität des Benutzers zu ändern.

Requirements (Anforderungen)

Anforderung Wert
Unterstützte Mindestversion (Client)
Windows Nur [ XP-Desktop-Apps]
Unterstützte Mindestversion (Server)
Windows Nur Server [ 2003-Desktop-Apps]
Header
Sspi.h (einschließlich Security.h)
Bibliothek
Secur32.lib
DLL
Secur32.dll

Weitere Informationen:

SSPI-Funktionen

DeleteSecurityContext

InitializeSecurityContext (Kerberos)