AcceptSecurityContext(General)-Funktion
Die AcceptSecurityContext (Allgemein)-Funktion ermöglicht es der Serverkomponente einer Transportanwendung, einen Sicherheitskontext zwischen dem Server und einem Remoteclient einzurichten. Der Remoteclient verwendet die InitializeSecurityContext (General)-Funktion, um den Prozess zum Einrichten eines Sicherheitskontextszu starten. Der Server kann mindestens ein Antworttoken vom Remoteclient anfordern, um die Einrichtung des Sicherheitskontextsabzuschließen.
Informationen zur Verwendung dieser Funktion mit einem bestimmten Sicherheitssupportanbieter (Security Support Provider, SSP) finden Sie in den folgenden Themen.
| Thema | Beschreibung |
|---|---|
| AcceptSecurityContext (CredSSP) | Ermöglicht der Serverkomponente einer Transportanwendung die Einrichtung eines Sicherheitskontexts zwischen dem Server und einem Remoteclient mithilfe von Credential Security Support Provider (CredSSP). |
| AcceptSecurityContext (Digest) | Ermöglicht es der Serverkomponente einer Transportanwendung, einen Sicherheitskontext zwischen dem Server und einem Remoteclient einzurichten, der Digest verwendet. |
| AcceptSecurityContext (Kerberos) | Ermöglicht es der Serverkomponente einer Transportanwendung, einen Sicherheitskontext zwischen dem Server und einem Remoteclient einzurichten, der Kerberos verwendet. |
| AcceptSecurityContext (Negotiate) | Ermöglicht es der Serverkomponente einer Transportanwendung, einen Sicherheitskontext zwischen dem Server und einem Remoteclient einzurichten, der Negotiate verwendet. |
| AcceptSecurityContext (NTLM) | Ermöglicht es der Serverkomponente einer Transportanwendung, einen Sicherheitskontext zwischen dem Server und einem Remoteclient einzurichten, der NTLM verwendet. |
| AcceptSecurityContext (Schannel) | Ermöglicht es der Serverkomponente einer Transportanwendung, einen Sicherheitskontext zwischen dem Server und einem Remoteclient herzustellen, 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 AcquireCredentialsHandle (General)-Funktion auf, wobei entweder das SECPKG _ CRED _ INBOUND- oder SECPKG _ CRED _ BOTH-Flag festgelegt ist, um dieses Handle abzurufen.
-
phContext [ in, out]
-
Ein Zeiger auf eine CTXTHandle-Struktur. Beim ersten Aufruf von AcceptSecurityContext (Allgemein) ist dieser Zeiger NULL. Bei nachfolgenden Aufrufen ist phContext das Handle für den teilweise gebildeten Kontext, der im phNewContext-Parameter durch den ersten Aufruf zurückgegeben wurde.
-
pInput [ in, optional]
-
Ein Zeiger auf eine SecBufferDesc-Struktur, die durch einen Clientaufruf von InitializeSecurityContext (Allgemein) 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 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 abgerufen werden, indem die QueryContextAttributes (Schannel)-Funktion für den Schannelkontext aufgerufen wird, den der Client für die Authentifizierung verwendet hat.
-
fContextReq [ In]
-
Bitflags, die die Attribute angeben, die der Server zum Einrichten des Kontexts benötigt. Bitflags können mit bitweisen OR-Vorgängen kombiniert werden. Bei diesem Parameter kann es sich um einen oder mehrere der folgenden Werte handelt.
Wert Bedeutung - ASC _ REQ _ ALLOCATE _ MEMORY
Digest und Schannel ordnen Ausgabepuffer für Sie zu. Wenn Sie die Verwendung der Ausgabepuffer abgeschlossen haben, können Sie sie freigeben, 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 aus Gründen der Abwärtskompatibilität verwendet, wenn die Unterstützung für die Endpunktkanalbindung nicht bekannt ist.
Dieser Wert schließen 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 Formatierungsmeldungen. - 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 aus, um Digest als SASL-Mechanismus zu verwenden. - ASC _ REQ _ INTEGRITY
Signieren von Nachrichten und Überprüfen von 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-PROXYBINDUNGEN _
Gibt an, dass digest kanalbindung erfordert.
Dieser Wert schließen 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 wiedergegebener Pakete. - ASC _ REQ _ SEQUENCE _ DETECT
Erkennen von Nachrichten, die außerhalb der Sequenz empfangen wurden. - ASC _ REQ _ STREAM
Unterstützung einer streamorientierten Verbindung.
Dieses Flag wird nur von Schannel unterstützt.Mögliche Attributflags und ihre Bedeutungen 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 pfContextAttr-Parameter.
-
TargetDataRep [ In]
-
Die Datendarstellung, z. B. die 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 für diesen Parameter 0 (null) an.
-
phNewContext [ in, out, optional]
-
Ein Zeiger auf eine CTXTHandle-Struktur. Beim ersten Aufruf von AcceptSecurityContext (Allgemein) empfängt dieser Zeiger das neue Kontexthandle. 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 (Allgemein)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.
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 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.
Dieser Parameter wird auf eine konstante maximale Zeit festgelegt. Es gibt keine Ablaufzeit für Digestsicherheitskontexteoder Anmeldeinformationen oder bei Verwendung des Digest-SSP.
Dies ist optional, wenn Der Schannel-SSP verwendet wird. Wenn die Remote-Partei ein Zertifikat bereitgestellt hat, das für die Authentifizierung verwendet werden soll, erhält 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 NULL sein.
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 bei Verwendung des Schannel-SSP zurückgegeben werden. 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 abschließen zu können. |
| Fehler bei der Funktion. Es ist ein Fehler aufgetreten, der einem SSPI-Fehlercode nicht zuordnen konnte. |
| 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. Es konnte keine Autorität für die Authentifizierung kontaktiert werden. Dies kann folgende Bedingungen haben:
|
| Fehler bei der Funktion. Das im phCredential-Parameter angegebene Anmeldeinformationshandl ist ungültig. Dieser Wert kann bei Verwendung des Digest- oder Schannel-SSP zurückgegeben werden. |
| 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. |
| Fehler bei der Funktion. Im fContextReq-Parameter wurde ein ungültiges Kontextattributflag angegeben. Dieser Wert kann bei Verwendung des Digest-SSP zurückgegeben werden. |
| 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. |
| 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 (General)](acceptsecuritycontext--general.md) aus. |
| 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. |
| 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[AcceptSecurityContext (General)](acceptsecuritycontext--general.md)-Funktion wurde aufgerufen, nachdem der angegebene Kontext eingerichtet wurde. Dieser Wert kann bei Verwendung des Digest-SSP zurückgegeben werden. |
Hinweise
Die AcceptSecurityContext(General)-Funktion ist das Serverent pendant zur InitializeSecurityContext (General)-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:
- 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 (Allgemein) einen Fehlercode zurückgibt, wird die gegenseitige Authentifizierungsaushandlung beendet. Andernfalls wird das von InitializeSecurityContext (Allgemein) 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 pfContextAttr-Parameter ist bei jeder erfolgreichen Rückgabe gültig, aber nur bei der endgültigen erfolgreichen Rückgabe sollten Sie die Flags in Bezug auf Sicherheitsaspekte des Kontexts untersuchen. Zwischenrücksetzungen 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 z. B. Vertraulichkeit (Verschlüsselung) angefordert wurde, aber nicht eingerichtet werden konnte, können einige Anwendungen die Verbindung sofort beenden. Wenn der Sicherheitskontext nicht eingerichtet werden kann, muss der Server den teilweise erstellten Kontext freigeben, indem er die DeleteSecurityContext-Funktion aufruft. 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.
Requirements (Anforderungen)
| Anforderung | Wert |
|---|---|
| Unterstützte Mindestversion (Client) |
Windows [Nur XP-Desktop-Apps] |
| Unterstützte Mindestversion (Server) |
Windows Nur Server [ 2003-Desktop-Apps] |
| Header |
|
| Bibliothek |
|
| DLL |
|