Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Funktionen AcceptSecurityContext (Digest) gör att serverkomponenten i ett transportprogram kan upprätta en säkerhetskontext mellan servern och en fjärrklient. Fjärrklienten använder funktionen InitializeSecurityContext (Digest) för att starta processen med att upprätta en säkerhetskontext. Servern kan kräva en eller flera svarstoken från fjärrklienten för att slutföra upprättandet av säkerhetskontexten.
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
);
Parametrar
phCredential[in, optional]
En referens till serverns autentiseringsuppgifter. Servern anropar funktionen AcquireCredentialsHandle (Digest) med antingen flaggan SECPKG_CRED_INBOUND eller SECPKG_CRED_BOTH inställd för att hämta handtaget.
phContext (på engelska)[in, out, optional]
En pekare till en CtxtHandle struktur. I det första anropet till AcceptSecurityContext (Digest)är den här pekaren NULL. Vid efterföljande anrop är phContext referensen till den delvis formade kontext som returnerades i parametern phNewContext av det första anropet.
Varning
Använd inte samma kontextreferens i samtidiga anrop för att AcceptSecurityContext (Digest). API-implementeringen i säkerhetstjänstleverantörerna är inte trådsäker.
pIngång[in, optional]
En pekare till en SecBufferDesc struktur som genereras av ett klientanrop till InitializeSecurityContext (Digest) som innehåller indatabuffertbeskrivningen.
I följande tabell visas buffertkonfigurationen för Sammanfattad HTTP. Den första bufferten måste vara av typen SECBUFFER_TOKENoch resten måste vara av typen SECBUFFER_PKG_PARAMS. SASL kräver endast buffert noll.
| Buffert #/bufferttyp | Betydelse |
|---|---|
|
0 SECBUFFER_TOKEN |
Tomt för det första anropet och utmaningssvaret som togs emot från klienten för det andra anropet. |
|
1 SECBUFFER_PKG_PARAMS |
Metod. Tecken är trådbundna format från begäranderaden. US ASCII-tecken med en byte. |
|
2 SECBUFFER_PKG_PARAMS |
Reserverad. |
|
3 SECBUFFER_PKG_PARAMS |
SÄKERHET. Hexadecimal representation av H(entity-body). US ASCII-tecken med en byte. |
|
4 SECBUFFER_PKG_PARAMS |
Rike. Sfärsträng för utmaningen. Unicode-sträng som måste vara representerad i US ASCII. |
|
5 | SECBUFFER_CHANNEL_BINDINGSSECBUFFER_READONLY |
Innehåller värdet för kanalbindningstoken. Windows Server 2008, Windows Vista, Windows Server 2003 och Windows XP: Det här värdet stöds inte. |
fContextReq (på engelska)[in]
Bitflaggor som anger de attribut som krävs av servern för att upprätta kontexten. Bitflaggor kan kombineras med hjälp av bitvisELLER åtgärder. Den här parametern kan vara ett eller flera av följande värden.
| Värde | Betydelse |
|---|---|
| ASC_REQ_ALLOCATE_MEMORY | Sammandrag allokerar utdatabuffertar åt dig. När du är klar med utdatabuffertarna frigör du dem genom att anropa funktionen FreeContextBuffer. |
| ASC_REQ_ALLOW_MISSING_BINDINGS | Anger att Digest inte kräver kanalbindningar för både inre och yttre kanaler. Det här värdet används för bakåtkompatibilitet när stöd för slutpunktskanalbindning inte är känt. Det här värdet är ömsesidigt uteslutande med ASC_REQ_PROXY_BINDINGS. Windows Server 2008, Windows Vista, Windows Server 2003 och Windows XP: Det här värdet stöds inte. |
| ASC_REQ_CONFIDENTIALITY | Kryptera och dekryptera meddelanden. Digest SSP stöder endast den här flaggan för SASL. |
| ASC_REQ_PROXY_BINDINGS | Anger att Sammandrag kräver kanalbindning. Det här värdet är ömsesidigt uteslutande med ASC_REQ_ALLOW_MISSING_BINDINGS. Windows Server 2008, Windows Vista, Windows Server 2003 och Windows XP: Det här värdet stöds inte. |
| ASC_REQ_CONNECTION | Den säkerhetskontexten hanterar inte formateringsmeddelanden. |
| ASC_REQ_EXTENDED_ERROR | När fel inträffar meddelas fjärrparten. |
| ASC_REQ_HTTP (0x10000000) | Använd Digest för HTTP. Utelämna den här flaggan för att använda Digest som en SASL-mekanism. |
| ASC_REQ_INTEGRITY | Signera meddelanden och verifiera signaturer. |
| ASC_REQ_REPLAY_DETECT | Identifiera uppspelade paket. |
| ASC_REQ_SEQUENCE_DETECT | Identifiera meddelanden som tagits emot utan sekvens. |
Möjliga attributflaggor och deras betydelser finns i Kontextkrav. Flaggor som används för den här parametern är prefix med ASC_REQ, till exempel ASC_REQ_DELEGATE.
De begärda attributen kanske inte stöds av klienten. Mer information finns i parametern pfContextAttr.
TargetDataRep (på engelska)[in]
Datarepresentationen, till exempel byteordning, på målet. Den här parametern kan vara antingen SECURITY_NATIVE_DREP eller SECURITY_NETWORK_DREP.
Den här parametern används inte med Digest SSP. När du använder Digest SSP anger du noll för den här parametern.
phNewContext[in, out, optional]
En pekare till en CtxtHandle struktur. Vid det första anropet till AcceptSecurityContext (Digest)tar den här pekaren emot det nya kontexthandtaget. Vid efterföljande anrop kan phNewContext vara samma som referensen som anges i parametern phContext.
phNewContext ska aldrig vara NULL.
pUtdata[in, out, optional]
En pekare till en SecBufferDesc struktur som innehåller utdatabuffertbeskrivningen. Den här bufferten skickas till klienten för indata till ytterligare anrop till InitializeSecurityContext (Digest). En utdatabuffert kan genereras även om funktionen returnerar SEC_E_OK. Alla buffertar som genereras måste skickas tillbaka till klientprogrammet.
pfContextAttr[out]
En pekare till en variabel som tar emot en uppsättning bitflaggor som anger attributen för den etablerade kontexten. En beskrivning av de olika attributen finns i Kontextkrav. Flaggor som används för den här parametern är prefix med ASC_RET, till exempel ASC_RET_DELEGATE.
Sök inte efter säkerhetsrelaterade attribut förrän det slutliga funktionsanropet returneras. Attributflaggor som inte är relaterade till säkerhet, till exempel flaggan ASC_RET_ALLOCATED_MEMORY, kan kontrolleras innan den slutliga returen.
ptsTimeStamp (på engelska)[out, optional]
En pekare till en TimeStamp struktur som tar emot förfallotiden för kontexten. Vi rekommenderar att säkerhetspaketet alltid returnerar det här värdet lokalt.
Den här parametern är inställd på en konstant maximal tid. Det finns ingen förfallotid för Sammanfattad säkerhetskontexts eller autentiseringsuppgifter eller när du använder Digest SSP.
Not
Fram till det sista anropet av autentiseringsprocessen kan förfallotiden för kontexten vara felaktig eftersom mer information kommer att tillhandahållas under senare skeden av förhandlingen. Därför måste ptsTimeStamp vara NULL tills det sista anropet till funktionen.
Returvärde
Den här funktionen returnerar något av följande värden:
| Returnera kod + värde | Beskrivning |
|---|---|
SEC_E_INSUFFICIENT_MEMORY0x80090300L |
Funktionen misslyckades. Det finns inte tillräckligt med minne för att slutföra den begärda åtgärden. |
SEC_E_INTERNAL_ERROR0x80090304L |
Funktionen misslyckades. Ett fel uppstod som inte mappades till en SSPI-felkod. |
SEC_E_INVALID_HANDLE0x80100003L |
Funktionen misslyckades. Handtaget som skickas till funktionen är inte giltigt. |
SEC_E_INVALID_TOKEN0x80090308L |
Funktionen misslyckades. Token som skickas till funktionen är inte giltig. |
SEC_E_LOGON_DENIED0x8009030CL |
Inloggningen misslyckades. |
SEC_E_NO_AUTHENTICATING_AUTHORITY0x80090311L |
Funktionen misslyckades. Det gick inte att kontakta någon utfärdare för autentisering. Detta kan bero på följande villkor: -Domännamnet för den autentiserande parten är felaktigt. -Domänen är inte tillgänglig. - Förtroenderelationen misslyckades. |
SEC_E_NO_CREDENTIALS0x8009030EL |
Funktionen misslyckades. Referensen för autentiseringsuppgifter som anges i parametern phCredential är inte giltig. |
SEC_E_OK0x00000000L |
Funktionen lyckades. Den säkerhetskontexten tagits emot från klienten accepterades. Om en utdatatoken genererades av funktionen måste den skickas till klientprocessen. |
SEC_E_SECURITY_QOS_FAILED0x80090332L |
Funktionen misslyckades. En kontextattributflagga som inte är giltig angavs i parametern fContextReq. |
SEC_I_COMPLETE_AND_CONTINUE0x00090314L |
Funktionen lyckades. Servern måste anropa CompleteAuthToken och skicka utdatatoken till klienten. Servern väntar sedan på en returtoken från klienten och gör sedan ett nytt anrop till AcceptSecurityContext (Digest). |
SEC_I_COMPLETE_NEEDED0x00090313L |
Funktionen lyckades. Servern måste slutföra skapandet av meddelandet från klienten och anropa sedan funktionen CompleteAuthToken. |
SEC_I_CONTINUE_NEEDED0x00090312L |
Funktionen lyckades. Servern måste skicka utdatatoken till klienten och vänta på en returnerad token. Den returnerade token ska skickas i pInput för ett annat anrop till AcceptSecurityContext (Digest). |
STATUS_LOGON_FAILURE0xC000006DL |
Funktionen misslyckades. Funktionen AcceptSecurityContext (Digest) anropades efter att den angivna kontexten upprättades. |
SEC_E_BAD_BINDINGS0x80090346L |
Funktionen misslyckades. Kanalbindningsprincipen uppfylldes inte. |
Anmärkningar
Funktionen AcceptSecurityContext (Digest) är servermotsvarigheten till funktionen InitializeSecurityContext (Digest).
När servern tar emot en begäran från en klient använder servern parametern fContextReq för att ange vad som krävs för sessionen. På det här sättet kan en server ange att klienter måste kunna använda en konfidentiell eller integritet-kontrollerad session, och den kan avvisa klienter som inte kan uppfylla detta krav. En server kan också inte kräva något, och det som klienten kan tillhandahålla eller kräver returneras i parametern pfContextAttr.
För ett paket som stöder autentisering med flera ben, till exempel ömsesidig autentisering, är anropssekvensen följande:
- Klienten skickar en token till servern.
- Servern anropar AcceptSecurityContext (Digest) första gången, vilket genererar en svarstoken som sedan skickas till klienten.
- Klienten tar emot token och skickar den till InitializeSecurityContext (Digest). Om InitializeSecurityContext (Digest) returnerar SEC_E_OK har ömsesidig autentisering slutförts och en säker session kan inledas. Om InitializeSecurityContext (Digest) returnerar en felkod avslutas förhandlingen om ömsesidig autentisering. Annars skickas säkerhetstoken som returneras av InitializeSecurityContext (Digest) till klienten och steg 2 och 3 upprepas.
- Använd inte värdet phContext i samtidiga anrop till AcceptSecurityContext (Digest). Implementeringen i säkerhetsprovidrar är inte trådsäker.
parametrarna fContextReq och pfContextAttr är bitmasker som representerar olika kontextattribut. En beskrivning av de olika attributen finns i Kontextkrav.
Not
Parametern pfContextAttr är giltig vid lyckad retur, men endast vid den slutliga lyckade returen bör du undersöka flaggorna som rör säkerhetsaspekter i kontexten. Mellanliggande returer kan till exempel ange flaggan ISC_RET_ALLOCATED_MEMORY.
Anroparen ansvarar för att avgöra om de slutliga kontextattributen är tillräckliga. Om till exempel konfidentialitet (kryptering) begärdes, men inte kunde upprättas, kan vissa program välja att stänga av anslutningen omedelbart. Om säkerhetskontext inte kan upprättas måste servern frigöra den delvis skapade kontexten genom att anropa funktionen DeleteSecurityContext. Information om när du ska anropa funktionen DeleteSecurityContext finns i DeleteSecurityContext.
När säkerhetskontext har upprättats kan serverprogrammet använda funktionen QuerySecurityContextToken för att hämta en referens till det användarkonto som klientcertifikatet mappades till. Dessutom kan servern använda funktionen ImpersonateSecurityContext för att personifiera användaren.
Krav
| Krav | Värde |
|---|---|
| Lägsta klient som stöds | Windows XP [endast skrivbordsappar] |
| Lägsta server som stöds | Windows Server 2003 [endast skrivbordsappar] |
| Rubrik | Sspi.h (inkludera Security.h) |
| Bibliotek | Secur32.lib |
| DLL | Secur32.dll |