AcceptSecurityContext -Funktion (Allgemein)
Mit der Funktion AcceptSecurityContext (Allgemein) kann die Serverkomponente einer Transportanwendung einen Sicherheitskontext zwischen dem Server und einem Remoteclient einrichten. Der Remoteclient verwendet die Funktion InitializeSecurityContext (Allgemein), um den Prozess zum Einrichten eines Sicherheitskontexts zu starten. Der Server kann ein oder mehrere Antworttoken vom Remoteclient erfordern, um das Einrichten des Sicherheitskontexts abzuschließen.
Informationen zur Verwendung dieser Funktion mit einem bestimmten Sicherheitsunterstützungsanbieter (Security Support Provider , SSP) finden Sie in den folgenden Themen.
Thema | Beschreibung |
---|---|
AcceptSecurityContext (CredSSP) | Ermöglicht der Serverkomponente einer Transportanwendung das Einrichten eines Sicherheitskontexts zwischen dem Server und einem Remoteclient mithilfe von CredSSP (Credential Security Support Provider). |
AcceptSecurityContext (Digest) | Ermöglicht der Serverkomponente einer Transportanwendung das Einrichten eines Sicherheitskontexts zwischen dem Server und einem Remoteclient, der Digest verwendet. |
AcceptSecurityContext (Kerberos) | Ermöglicht der Serverkomponente einer Transportanwendung das Einrichten eines Sicherheitskontexts zwischen dem Server und einem Remoteclient, der Kerberos verwendet. |
AcceptSecurityContext (Negotiate) | Ermöglicht der Serverkomponente einer Transportanwendung das Einrichten eines Sicherheitskontexts zwischen dem Server und einem Remoteclient, der Negotiate verwendet. |
AcceptSecurityContext (NTLM) | Ermöglicht der Serverkomponente einer Transportanwendung das Einrichten eines Sicherheitskontexts zwischen dem Server und einem Remoteclient, der NTLM verwendet. |
AcceptSecurityContext (Schannel) | Ermöglicht der Serverkomponente einer Transportanwendung das Einrichten eines Sicherheitskontexts zwischen dem Server und einem Remoteclient, der Schannel verwendet. |
Syntax
SECURITY_STATUS SEC_Entry AcceptSecurityContext(
_In_opt_ PCredHandle phCredential,
_Inout_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 Funktion AcquireCredentialsHandle (Allgemein) auf, wobei entweder das flag SECPKG_CRED_INBOUND oder SECPKG_CRED_BOTH festgelegt ist, um dieses Handle abzurufen.
phContext[in, out]
Ein Zeiger auf eine CtxtHandle-Struktur . Beim ersten Aufruf von AcceptSecurityContext (General) lautet NULL
dieser Zeiger . Bei nachfolgenden Aufrufen ist phContext das Handle für den teilweise gebildeten Kontext, der im phNewContext-Parameter vom ersten Aufruf zurückgegeben wurde.
Warnung
Verwenden Sie nicht denselben Kontexthandle bei gleichzeitigen Aufrufen von AcceptSecurityContext (General). Die API-Implementierung in den Sicherheitsdienstanbietern ist nicht threadsicher.
pInput[in, optional]
Ein Zeiger auf eine SecBufferDesc-Struktur , die von einem Clientaufruf von InitializeSecurityContext (General) generiert wird und den Eingabepufferdeskriptor enthält.
Bei Verwendung des Schannel-SSP muss der erste Puffer vom Typ SECBUFFER_TOKEN sein und das vom Client empfangene Sicherheitstoken enthalten. Der zweite Puffer sollte vom Typ SECBUFFER_EMPTY sein.
Bei Verwendung der Negotiate-, Kerberos- oder NTLM-SSPs können Kanalbindungsinformationen angegeben werden, indem eine SecBuffer-Struktur vom Typ SECBUFFER_CHANNEL_BINDINGS zusätzlich zu den Puffern übergeben wird, die durch den Aufruf der Funktion InitializeSecurityContext (General) 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. Bei diesem Parameter kann es sich um einen oder mehrere der folgenden Werte handeln.
Wert | Bedeutung |
---|---|
ASC_REQ_ALLOCATE_MEMORY | Digest und Schannel weisen Ausgabepuffer für Sie zu. Wenn Sie die Verwendung der Ausgabepuffer abgeschlossen haben, geben Sie sie frei, indem Sie die FreeContextBuffer-Funktion aufrufen. |
ASC_REQ_ALLOW_MISSING_BINDINGS | Gibt an, dass Digest keine Kanalbindungen für innere und äußere Kanäle erfordert. Dieser Wert wird zur Abwärtskompatibilität verwendet, wenn die Unterstützung für die Endpunktkanalbindung nicht bekannt ist. Dieser Wert schließt sich mit ASC_REQ_PROXY_BINDINGS gegenseitig aus. Dieser Wert wird nur vom Digest-SSP unterstützt. Windows Server 2008, Windows Vista, Windows Server 2003 und Windows XP: Dieser Wert wird nicht unterstützt. |
ASC_REQ_CONFIDENTIALITY | Verschlüsseln und Entschlüsseln von Nachrichten. Der Digest-SSP unterstützt dieses Flag nur für SASL. |
ASC_REQ_CONNECTION | Der Sicherheitskontext verarbeitet keine Formatierungsnachrichten. |
ASC_REQ_DELEGATE | Der Server darf die Identität des Clients annehmen. Gültig für Kerberos. Ignorieren Sie dieses Flag für die eingeschränkte Delegierung. |
ASC_REQ_EXTENDED_ERROR | Wenn Fehler auftreten, wird die Remotepartei benachrichtigt. |
ASC_REQ_HTTP (0x10000000) | Verwenden Sie Digest für HTTP. Lassen Sie dieses Flag weg, um Digest als SASL-Mechanismus zu verwenden. |
ASC_REQ_INTEGRITY | Signieren Sie Nachrichten und überprüfen Sie Signaturen. Schannel unterstützt dieses Flag nicht. |
ASC_REQ_MUTUAL_AUTH | Der Client muss ein Zertifikat bereitstellen, das für die Clientauthentifizierung verwendet werden soll. Dieses Flag wird nur von Schannel unterstützt. |
ASC_REQ_PROXY_BINDINGS | Gibt an, dass Digest eine Kanalbindung erfordert. Dieser Wert schließt sich mit ASC_REQ_ALLOW_MISSING_BINDINGS gegenseitig aus. Dieser Wert wird nur vom Digest-SSP unterstützt. Windows Server 2008, Windows Vista, Windows Server 2003 und Windows XP: Dieser Wert wird nicht unterstützt. |
ASC_REQ_REPLAY_DETECT | Erkennen von wiedergegebenen Paketen. |
ASC_REQ_SEQUENCE_DETECT | Erkennen Sie Nachrichten, die außerhalb der Sequenz empfangen werden. |
ASC_REQ_STREAM | Unterstützung einer streamorientierten Verbindung. Dieses Flag wird nur von Schannel unterstützt. |
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 im PfContextAttr-Parameter .
TargetDataRep[in]
Die Datendarstellung, z. B. bytereihenfolge, auf dem Ziel. Dieser Parameter kann entweder SECURITY_NATIVE_DREP oder SECURITY_NETWORK_DREP sein.
Dieser Parameter wird nicht mit Schannel- oder Digest-SSPs verwendet. Wenn Sie Schannel- oder Digest-SSPs verwenden, geben Sie null für diesen Parameter an.
phNewContext[in, out, optional]
Ein Zeiger auf eine CtxtHandle-Struktur . Beim ersten Aufruf von AcceptSecurityContext (General) empfängt dieser Zeiger das neue Kontexthandle. Bei nachfolgenden Aufrufen kann phNewContext mit dem im phContext-Parameter angegebenen Handle identisch sein.
phNewContext sollte niemals sein NULL
.
pOutput[in, out, optional]
Ein Zeiger auf eine SecBufferDesc-Struktur , die den Ausgabepufferdeskriptor enthält. Dieser Puffer wird an den Client gesendet, um zusätzliche Aufrufe von InitializeSecurityContext (General) einzugeben. Ein Ausgabepuffer kann auch dann generiert werden, wenn die Funktion SEC_E_OK zurückgibt. Jeder generierte Puffer muss an die Clientanwendung zurückgesendet werden.
Bei Verwendung von Schannel empfängt dieser Puffer bei der Ausgabe ein Token für den Sicherheitskontext. Das Token muss an den Client gesendet werden. Die Funktion kann auch einen Puffer vom Typ SECBUFFER_EXTRA zurückgeben. Darüber hinaus muss der Aufrufer einen Puffer vom Typ SECBUFFER_ALERT übergeben. Wenn bei der Ausgabe eine Warnung generiert wird, enthält dieser Puffer Informationen zu dieser Warnung, und die Funktion schlägt fehl.
pfContextAttr[out]
Ein Zeiger auf eine Variable, die eine Reihe von Bitflags empfängt, die die Attribute des eingerichteten Kontexts angeben. Eine Beschreibung der verschiedenen Attribute finden Sie unter Kontextanforderungen. Für diesen Parameter verwendete Flags werden ASC_RET vorangestellt, z. B. ASC_RET_DELEGATE.
Suchen Sie erst nach sicherheitsbezogenen Attributen, bis der endgültige Funktionsaufruf erfolgreich zurückgegeben wird. Attributflags, die nicht mit der Sicherheit zusammenhängen, 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 zur Ortszeit zurückgibt.
Dieser Parameter ist auf eine konstante maximale Zeit festgelegt. Es gibt keine Ablaufzeit für Digest-Sicherheitskontexteoder Anmeldeinformationen oder bei Verwendung des Digest-SSP.
Dies ist optional, wenn Sie den Schannel-SSP verwenden. Wenn die Remotepartei ein Zertifikat bereitgestellt hat, das für die Authentifizierung verwendet werden soll, empfängt dieser Parameter die Ablaufzeit für dieses Zertifikat. Wenn kein Zertifikat angegeben wurde, wird ein maximaler Zeitwert zurückgegeben.
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 sein NULL
.
Rückgabewert
Diese Funktion gibt einen der folgenden Werte zurück.
Rückgabecode/-wert | Beschreibung |
---|---|
| Fehler bei der Funktion. Die Kanalbindungsrichtlinie wurde nicht erfüllt. |
| Die Funktion wurde erfolgreich ausgeführt. Die Daten im Eingabepuffer sind unvollständig. Die Anwendung muss zusätzliche Daten vom Client lesen und [AcceptSecurityContext (Allgemein)](acceptsecuritycontext--general.md) erneut aufrufen. Dieser Wert kann zurückgegeben werden, wenn Sie den Schannel-SSP verwenden. Weitere Informationen zu diesem Rückgabewert finden Sie unter [AcceptSecurityContext (Schannel)](acceptsecuritycontext--schannel.md). |
| Fehler bei der Funktion. Es ist nicht genügend Arbeitsspeicher verfügbar, um die angeforderte Aktion abzuschließen. |
| Fehler bei der Funktion. Es ist ein Fehler aufgetreten, der keinem SSPI-Fehlercode zugeordnet wurde. |
| Fehler bei der Funktion. Das an die Funktion übergebene Handle ist ungültig. |
| Fehler bei der Funktion. Das an die Funktion übergebene Token ist ungültig. |
| Fehler bei der Anmeldung. |
| Fehler bei der Funktion. Für die Authentifizierung konnte keine Autorität kontaktiert werden. Dies kann auf die folgenden Bedingungen zurückzuführen sein:
|
| Fehler bei der Funktion. Das im parameter phCredential angegebene Anmeldeinformationshandle ist ungültig. Dieser Wert kann zurückgegeben werden, wenn Sie den Digest- oder Schannel-SSP verwenden. |
| Die Funktion wurde erfolgreich ausgeführt. Der [*Sicherheitskontext*](.. Vom Client empfangene /secgloss/s-gly.md) wurde akzeptiert. Wenn von der Funktion ein Ausgabetoken generiert wurde, muss es an den Clientprozess gesendet werden. |
| Fehler bei der Funktion. Im fContextReq-Parameter wurde ein ungültiges Kontextattributeflag angegeben. Dieser Wert kann zurückgegeben werden, wenn Sie den Digest-SSP verwenden. |
| Fehler bei der Funktion. Im fContextReq-Parameter wurde ein ungültiges Kontextattributeflag (ASC_REQ_DELEGATE oder ASC_REQ_PROMPT_FOR_CREDS) angegeben. Dieser Wert kann zurückgegeben werden, wenn Sie den Schannel-SSP verwenden. |
| 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 ruft dann [AcceptSecurityContext (Allgemein)](acceptsecuritycontext--general.md) auf. |
| Die Funktion wurde erfolgreich ausgeführt. Der Server muss die Erstellung der Nachricht vom Client abschließen und dann die Funktion [CompleteAuthToken](/windows/win32/api/sspi/nf-sspi-completeauthtoken) aufrufen. |
| 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 (General)](acceptsecuritycontext--general.md) übergeben werden. |
| Fehler bei der Funktion. Die Funktion [AcceptSecurityContext (General)](acceptsecuritycontext--general.md) wurde aufgerufen, nachdem der angegebene Kontext eingerichtet wurde. Dieser Wert kann zurückgegeben werden, wenn der Digest-SSP verwendet wird. |
Bemerkungen
Die AcceptSecurityContext(General) -Funktion ist das Server-Pendant zur InitializeSecurityContext (General) -Funktion.
Wenn der Server eine Anforderung von einem Client empfängt, verwendet der Server den fContextReq-Parameter , 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 er kann Clients ablehnen, die diese Anforderung nicht erfüllen können. Alternativ kann ein Server nichts erfordern, und alles, was der Client bereitstellen kann oder benötigt, wird im pfContextAttr-Parameter zurückgegeben.
Für ein Paket, das die Authentifizierung mit mehreren Beinen unterstützt, z. B. die gegenseitige Authentifizierung, lautet die Aufrufsequenz wie folgt:
- Der Client überträgt ein Token an den Server.
- Der Server ruft AcceptSecurityContext (General) zum ersten Mal auf, wodurch ein Antworttoken generiert wird, das dann an den Client gesendet wird.
- Der Client empfängt das Token und übergibt es an InitializeSecurityContext (Allgemein). Wenn InitializeSecurityContext (Allgemein) SEC_E_OK zurückgibt, wurde die gegenseitige Authentifizierung abgeschlossen, und eine sichere Sitzung kann beginnen. Wenn InitializeSecurityContext (General) einen Fehlercode zurückgibt, endet die Aushandlung der gegenseitigen Authentifizierung. Andernfalls wird das von InitializeSecurityContext (Allgemein) zurückgegebene Sicherheitstoken an den Client gesendet, und die Schritte 2 und 3 werden wiederholt.
- Verwenden Sie den wert phContext nicht in gleichzeitigen Aufrufen von AcceptSecurityContext (Allgemein). Die Implementierung in den Sicherheitsanbietern ist nicht threadsicher.
Die Parameter fContextReq und pfContextAttr sind Bitmasken, die verschiedene Kontextattribute darstellen. Eine Beschreibung der verschiedenen Attribute finden Sie unter Kontextanforderungen.
Hinweis
Der pfContextAttr-Parameter ist bei jeder erfolgreichen Rückgabe gültig, aber nur bei der endgültigen erfolgreichen Rückgabe, wenn Sie die Flags im Zusammenhang mit Sicherheitsaspekten des Kontexts untersuchen. Zwischenzeitliche Rückgaben können z. B. das flag ISC_RET_ALLOCATED_MEMORY festlegen.
Der Aufrufer ist dafür verantwortlich, zu bestimmen, ob die endgültigen Kontextattribute ausreichend sind. Wenn z. B. 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 freigeben. 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 annehmen.
Anforderungen
Anforderung | Wert |
---|---|
Unterstützte Mindestversion (Client) | Windows XP [nur Desktop-Apps] |
Unterstützte Mindestversion (Server) | Windows Server 2003 [nur Desktop-Apps] |
Header | Sspi.h (einschließlich Security.h) |
Bibliothek | Secur32.lib |
DLL | Secur32.dll |