Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Met de functie AcceptSecurityContext (Digest) kan het serveronderdeel van een transporttoepassing een beveiligingscontext tussen de server en een externe client tot stand brengen. De externe client gebruikt de functie InitializeSecurityContext (Digest) om het proces van het tot stand brengen van een beveiligingscontext te starten. De server kan een of meer antwoordtokens van de externe client vereisen om de beveiligingscontext tot stand te brengen.
Syntaxis
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
);
Parameterwaarden
phCredential-[in, optional]
Een ingang naar de referenties van de server. De server roept de functie AcquireCredentialsHandle (Digest) aan met de vlag SECPKG_CRED_INBOUND of SECPKG_CRED_BOTH ingesteld om deze ingang op te halen.
phContext-[in, out, optional]
Een aanwijzer naar een CtxtHandle structuur. Bij de eerste aanroep van AcceptSecurityContext (Digest) is NULLdeze aanwijzer. Bij volgende aanroepen is phContext de ingang voor de gedeeltelijk gevormde context die is geretourneerd in de parameter phNewContext door de eerste aanroep.
Waarschuwing
Gebruik niet dezelfde contextgreep in gelijktijdige aanroepen naar AcceptSecurityContext (Digest). De API-implementatie in de beveiligingsserviceproviders is niet thread-safe.
[in, optional]
Een aanwijzer naar een SecBufferDesc-structuur die wordt gegenereerd door een clientaanroep naar InitializeSecurityContext (Digest) die de descriptor van de invoerbuffer bevat.
In de volgende tabel ziet u de bufferconfiguratie voor Digest HTTP. De eerste buffer moet van het type SECBUFFER_TOKEN zijn en de rest moet van het type SECBUFFER_PKG_PARAMS zijn. SASL vereist alleen buffer nul.
| Buffer #/buffertype | Betekenis |
|---|---|
|
0 SECBUFFER_TOKEN |
Leeg voor het eerste gesprek en het antwoord van de vraag dat van de client is ontvangen voor de tweede aanroep. |
|
1 SECBUFFER_PKG_PARAMS |
Methode. Tekens zijn wireline-indeling vanaf de aanvraagregel. US ASCII-tekens met één byte. |
|
2 SECBUFFER_PKG_PARAMS |
Gereserveerd. |
|
3 SECBUFFER_PKG_PARAMS |
HEER. Hexadecimale weergave van H(entiteitstekst). US ASCII-tekens met één byte. |
|
4 SECBUFFER_PKG_PARAMS |
Rijk. Realm-tekenreeks voor de uitdaging. Unicode-tekenreeks die moet worden vertegenwoordigd in US ASCII. |
|
5 | SECBUFFER_CHANNEL_BINDINGSSECBUFFER_READONLY |
Bevat de waarde van het bindingstoken van het kanaal. Windows Server 2008, Windows Vista, Windows Server 2003 en Windows XP: Deze waarde wordt niet ondersteund. |
fContextReq-[in]
Bitvlagken die de kenmerken opgeven die door de server zijn vereist om de context tot stand te brengen. Bitvlagmen kunnen worden gecombineerd met bitwise-OF bewerkingen. Deze parameter kan een of meer van de volgende waarden zijn.
| Waarde | Betekenis |
|---|---|
| ASC_REQ_ALLOCATE_MEMORY | Digest wijst uitvoerbuffers voor u toe. Wanneer u klaar bent met het gebruik van de uitvoerbuffers, maakt u deze vrij door de functie FreeContextBuffer aan te roepen. |
| ASC_REQ_ALLOW_MISSING_BINDINGS | Geeft aan dat Digest geen kanaalbindingen nodig heeft voor zowel binnen- als buitenkanalen. Deze waarde wordt gebruikt voor achterwaartse compatibiliteit wanneer ondersteuning voor eindpuntkanaalbinding niet bekend is. Deze waarde is wederzijds exclusief met ASC_REQ_PROXY_BINDINGS. Windows Server 2008, Windows Vista, Windows Server 2003 en Windows XP: Deze waarde wordt niet ondersteund. |
| ASC_REQ_CONFIDENTIALITY | Berichten versleutelen en ontsleutelen. De Digest-SSP ondersteunt deze vlag alleen voor SASL. |
| ASC_REQ_PROXY_BINDINGS | Geeft aan dat Digest kanaalbinding vereist. Deze waarde is wederzijds exclusief met ASC_REQ_ALLOW_MISSING_BINDINGS. Windows Server 2008, Windows Vista, Windows Server 2003 en Windows XP: Deze waarde wordt niet ondersteund. |
| ASC_REQ_CONNECTION | De beveiligingscontext verwerkt geen opmaakberichten. |
| ASC_REQ_EXTENDED_ERROR | Wanneer er fouten optreden, wordt de externe partij op de hoogte gesteld. |
| ASC_REQ_HTTP (0x10000000) | Gebruik Digest voor HTTP. Laat deze vlag weg om Digest als SASL-mechanisme te gebruiken. |
| ASC_REQ_INTEGRITY | Onderteken berichten en verifieer handtekeningen. |
| ASC_REQ_REPLAY_DETECT | Detecteer opnieuw afgespeelde pakketten. |
| ASC_REQ_SEQUENCE_DETECT | Detecteer berichten die niet op volgorde zijn ontvangen. |
Zie Contextvereistenvoor mogelijke kenmerkvlagmen en betekenissen. Vlaggen die voor deze parameter worden gebruikt, worden voorafgegaan door ASC_REQ, bijvoorbeeld ASC_REQ_DELEGATE.
De aangevraagde kenmerken worden mogelijk niet ondersteund door de client. Zie de parameter pfContextAttr voor meer informatie.
TargetDataRep-[in]
De gegevensweergave, zoals bytevolgorde, op het doel. Deze parameter kan worden SECURITY_NATIVE_DREP of SECURITY_NETWORK_DREP.
Deze parameter wordt niet gebruikt met Digest SSP. Wanneer u Digest SSP gebruikt, geeft u nul op voor deze parameter.
phNewContext-[in, out, optional]
Een aanwijzer naar een CtxtHandle structuur. Bij de eerste aanroep van AcceptSecurityContext (Digest) ontvangt deze aanwijzer de nieuwe contextgreep. Bij volgende aanroepen kan phNewContext- hetzelfde zijn als de ingang die is opgegeven in de parameter phContext.
phNewContext mag nooit zijn NULL.
pOutput-[in, out, optional]
Een aanwijzer naar een SecBufferDesc structuur die de uitvoerbufferdescriptor bevat. Deze buffer wordt naar de client verzonden voor invoer in aanvullende aanroepen naar InitializeSecurityContext (Digest). Er kan een uitvoerbuffer worden gegenereerd, zelfs als de functie SEC_E_OK retourneert. Elke gegenereerde buffer moet worden teruggestuurd naar de clienttoepassing.
pfContextAttr-[out]
Een aanwijzer naar een variabele die een set bitvlaggen ontvangt die de kenmerken van de tot stand gebrachte context aangeven. Zie Contextvereistenvoor een beschrijving van de verschillende kenmerken. Vlaggen die voor deze parameter worden gebruikt, worden voorafgegaan door ASC_RET, bijvoorbeeld ASC_RET_DELEGATE.
Controleer pas op beveiligingskenmerken als de laatste functie-aanroep is geretourneerd. Kenmerkvlagmen die niet zijn gerelateerd aan beveiliging, zoals de vlag ASC_RET_ALLOCATED_MEMORY, kunnen worden gecontroleerd voordat de definitieve terugkeer wordt uitgevoerd.
ptsTijdstempel[out, optional]
Een aanwijzer naar een TimeStamp structuur die de verlooptijd van de context ontvangt. Het is raadzaam dat het beveiligingspakket deze waarde altijd in lokale tijd retourneert.
Deze parameter is ingesteld op een constante maximale tijd. Er is geen verlooptijd voor Digest-beveiligingscontextenof -referenties of wanneer u de Digest-SSP gebruikt.
Opmerking
Tot de laatste aanroep van het verificatieproces kan de verlooptijd voor de context onjuist zijn, omdat er in latere fasen van de onderhandeling meer informatie wordt verstrekt. Daarom moet ptsTimeStamp- worden NULL tot de laatste aanroep van de functie.
Retourwaarde
Met deze functie wordt een van de volgende waarden geretourneerd:
| Retourcode + waarde | Beschrijving |
|---|---|
SEC_E_INSUFFICIENT_MEMORY0x80090300L |
De functie is mislukt. Er is onvoldoende geheugen beschikbaar om de aangevraagde actie te voltooien. |
SEC_E_INTERNAL_ERROR0x80090304L |
De functie is mislukt. Er is een fout opgetreden die niet is toegewezen aan een SSPI-foutcode. |
SEC_E_INVALID_HANDLE0x80100003L |
De functie is mislukt. De greep die aan de functie is doorgegeven, is ongeldig. |
SEC_E_INVALID_TOKEN0x80090308L |
De functie is mislukt. Het token dat aan de functie is doorgegeven, is ongeldig. |
SEC_E_LOGON_DENIED0x8009030CL |
De aanmelding is mislukt. |
SEC_E_NO_AUTHENTICATING_AUTHORITY0x80090311L |
De functie is mislukt. Er kan geen contact worden gemaakt met de instantie voor verificatie. Dit kan worden veroorzaakt door de volgende voorwaarden: -De domeinnaam van de verifiërende partij is onjuist. -Het domein is niet beschikbaar. -De vertrouwensrelatie is mislukt. |
SEC_E_NO_CREDENTIALS0x8009030EL |
De functie is mislukt. De referenties-ingang die is opgegeven in de parameter phCredential is ongeldig. |
SEC_E_OK0x00000000L |
De functie is geslaagd. De beveiligingscontext die van de client is ontvangen, is geaccepteerd. Als een uitvoertoken is gegenereerd door de functie, moet het naar het clientproces worden verzonden. |
SEC_E_SECURITY_QOS_FAILED0x80090332L |
De functie is mislukt. Er is een contextkenmerkvlag opgegeven in de parameter fContextReq . |
SEC_I_COMPLETE_AND_CONTINUE0x00090314L |
De functie is geslaagd. De server moet CompleteAuthToken aanroepen en het uitvoertoken doorgeven aan de client. De server wacht vervolgens op een retourtoken van de client en voert vervolgens een andere aanroep naar AcceptSecurityContext (Digest) uit. |
SEC_I_COMPLETE_NEEDED0x00090313L |
De functie is geslaagd. De server moet het bouwen van het bericht van de client voltooien en vervolgens de functie CompleteAuthToken aanroepen. |
SEC_I_CONTINUE_NEEDED0x00090312L |
De functie is geslaagd. De server moet het uitvoertoken naar de client verzenden en wachten op een geretourneerd token. Het geretourneerde token moet worden doorgegeven in pInput voor een andere aanroep naar AcceptSecurityContext (Digest). |
STATUS_LOGON_FAILURE0xC000006DL |
De functie is mislukt. De functie AcceptSecurityContext (Digest) is aangeroepen nadat de opgegeven context tot stand is gebracht. |
SEC_E_BAD_BINDINGS0x80090346L |
De functie is mislukt. Er is niet voldaan aan het beleid voor kanaalbinding. |
Opmerkingen
De functie AcceptSecurityContext (Digest) is de server-tegenhanger voor de functie InitializeSecurityContext (Digest).
Wanneer de server een aanvraag van een client ontvangt, gebruikt de server de parameter fContextReq om op te geven wat de sessie vereist. Op deze manier kan een server opgeven dat clients in staat moeten zijn om een vertrouwelijke of integriteitscheckte sessie te gebruiken en clients die niet aan die vraag kunnen voldoen, kunnen weigeren. Een server kan ook niets vereisen en wat de client ook kan opgeven of vereisen, wordt geretourneerd in de parameter pfContextAttr .
Voor een pakket dat ondersteuning biedt voor meervoudige verificatie, zoals wederzijdse verificatie, is de aanroepvolgorde als volgt:
- De client verzendt een token naar de server.
- De server roept AcceptSecurityContext (Digest) de eerste keer aan, waarmee een antwoordtoken wordt gegenereerd dat vervolgens naar de client wordt verzonden.
- De client ontvangt het token en geeft het door aan InitializeSecurityContext (Digest). Als InitializeSecurityContext (Digest) SEC_E_OK retourneert, is wederzijdse verificatie voltooid en kan er een beveiligde sessie worden gestart. Als InitializeSecurityContext (Digest) een foutcode retourneert, wordt de wederzijdse verificatieonderhandeling beëindigd. Anders wordt het beveiligingstoken dat wordt geretourneerd door InitializeSecurityContext (Digest) naar de client verzonden en worden stap 2 en 3 herhaald.
- Gebruik de phContext-waarde niet in gelijktijdige aanroepen naar AcceptSecurityContext (Digest). De implementatie in de beveiligingsproviders is niet thread-safe.
De parameters fContextReq en pfContextAttr zijn bitmaskers die verschillende contextkenmerken vertegenwoordigen. Zie Contextvereistenvoor een beschrijving van de verschillende kenmerken.
Opmerking
De parameter pfContextAttr is geldig voor een geslaagde retour, maar alleen bij de uiteindelijke geslaagde retour moet u de vlaggen onderzoeken die betrekking hebben op beveiligingsaspecten van de context. Tussenliggende retourneert kan bijvoorbeeld de ISC_RET_ALLOCATED_MEMORY vlag instellen.
De aanroeper is verantwoordelijk voor het bepalen of de uiteindelijke contextkenmerken voldoende zijn. Als bijvoorbeeld vertrouwelijkheid (versleuteling) is aangevraagd, maar niet tot stand kon worden gebracht, kunnen sommige toepassingen ervoor kiezen om de verbinding onmiddellijk af te sluiten. Als de beveiligingscontext niet tot stand kan worden gebracht, moet de server de gedeeltelijk gemaakte context vrij maken door de functie DeleteSecurityContext aan te roepen. Zie DeleteSecurityContextvoor informatie over wanneer u de functie DeleteSecurityContext aanroept.
Nadat de beveiligingscontext tot stand is gebracht, kan de servertoepassing de functie QuerySecurityContextToken gebruiken om een ingang op te halen voor het gebruikersaccount waaraan het clientcertificaat is toegewezen. De server kan ook de functie ImpersonateSecurityContext gebruiken om de gebruiker te imiteren.
Vereisten
| Voorwaarde | Waarde |
|---|---|
| Minimaal ondersteunde client | Windows XP [alleen desktop-apps] |
| Minimaal ondersteunde server | Windows Server 2003 [alleen desktop-apps] |
| Koptekst | Sspi.h (inclusief Security.h) |
| Bibliotheek | Secur32.lib |
| DLL | Secur32.dll |