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.
De functie InitializeSecurityContext (Kerberos) initieert de uitgaande beveiligingscontext aan de clientzijde vanuit een referentiehandle. De functie wordt gebruikt om een beveiligingscontext te bouwen tussen de clienttoepassing en een externe peer. InitializeSecurityContext (Kerberos) retourneert een token dat de client moet doorgeven aan de externe peer, die de peer op zijn beurt verzendt naar de lokale beveiligingsimplementatie via de aanroep AcceptSecurityContext (Kerberos). Het gegenereerde token moet door alle bellers als ondoorzichtig worden beschouwd.
Doorgaans wordt de functie InitializeSecurityContext (Kerberos) in een lus aangeroepen totdat er een voldoende beveiligingscontext is vastgesteld.
Syntaxis
SECURITY_STATUS SEC_Entry InitializeSecurityContext(
_In_opt_ PCredHandle phCredential,
_In_opt_ PCtxtHandle phContext,
_In_ SEC_CHAR *pszTargetName,
_In_ ULONG fContextReq,
_In_ ULONG Reserved1,
_In_ ULONG TargetDataRep,
_In_opt_ PSecBufferDesc pInput,
_In_ ULONG Reserved2,
_Inout_opt_ PCtxtHandle phNewContext,
_Inout_opt_ PSecBufferDesc pOutput,
_Out_ PULONG pfContextAttr,
_Out_opt_ PTimeStamp ptsExpiry
);
Parameterwaarden
phCredential-[in, optional]
Een ingang voor de referenties die worden geretourneerd door AcquireCredentialsHandle (Kerberos). Deze ingang wordt gebruikt om de beveiligingscontext te bouwen. Voor de functie InitializeSecurityContext (Kerberos) zijn ten minste OUTBOUND-referenties vereist.
phContext-[in, optional]
Een aanwijzer naar een CtxtHandle structuur. Bij de eerste aanroep van InitializeSecurityContext (Kerberos) is NULLdeze aanwijzer . Bij de tweede aanroep is deze parameter een aanwijzer naar de ingang naar de gedeeltelijk gevormde context die door de eerste aanroep wordt geretourneerd in de parameter phNewContext .
Waarschuwing
Gebruik niet dezelfde contexthandle in gelijktijdige aanroepen naar InitializeSecurityContext (Kerberos). De API-implementatie in de beveiligingsserviceproviders is niet thread-safe.
pszDoelnaam[in]
Een aanwijzer naar een door null beëindigde tekenreeks die de SPN (Service Principal Name) of de beveiligingscontext van de doelserver aangeeft.
Gebruik een volledig gekwalificeerde doelnaam omdat korte namen niet worden ondersteund in forests.
fContextReq-[in]
Bitvlaggen die aanvragen voor de context aangeven. Niet alle pakketten kunnen alle vereisten ondersteunen. Vlaggen die voor deze parameter worden gebruikt, worden voorafgegaan door ISC_REQ_, bijvoorbeeld ISC_REQ_DELEGATE. Deze parameter kan een of meer van de volgende kenmerkenvlagken zijn.
| Waarde | Betekenis |
|---|---|
| ISC_REQ_ALLOCATE_MEMORY | Het beveiligingspakket 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. |
| ISC_REQ_CONFIDENTIALITY | Berichten versleutelen met behulp van de functie EncryptMessage . |
| ISC_REQ_CONNECTION | De beveiligingscontext verwerkt geen opmaakberichten. Deze waarde is de standaardwaarde. |
| ISC_REQ_DELEGATE | De server kan de context gebruiken om te verifiëren bij andere servers als client. De ISC_REQ_MUTUAL_AUTH vlag moet zijn ingesteld om deze vlag te laten werken. Geldig voor Kerberos. Negeer deze vlag voor beperkte delegering. |
| ISC_REQ_EXTENDED_ERROR | Wanneer er fouten optreden, wordt de externe partij op de hoogte gesteld. |
| ISC_REQ_INTEGRITY | Onderteken berichten en verifieer handtekeningen met behulp van de functies EncryptMessage en MakeSignature . |
| ISC_REQ_MUTUAL_AUTH | Aan het wederzijdse verificatiebeleid van de service wordt voldaan. VOORZICHTIGHEID: Dit betekent niet noodzakelijkerwijs dat wederzijdse verificatie wordt uitgevoerd, alleen dat aan het verificatiebeleid van de service wordt voldaan. Als u ervoor wilt zorgen dat wederzijdse verificatie wordt uitgevoerd, roept u de functie QueryContextAttributes (Kerberos) aan. |
| ISC_REQ_NO_INTEGRITY | Als deze vlag is ingesteld, wordt de vlag ISC_REQ_INTEGRITY genegeerd. |
| ISC_REQ_REPLAY_DETECT | Detecteer opnieuw afgespeelde berichten die zijn gecodeerd met behulp van de functies EncryptMessage of MakeSignature . |
| ISC_REQ_SEQUENCE_DETECT | Detecteer berichten die niet op volgorde zijn ontvangen. |
| ISC_REQ_STREAM | Ondersteuning voor een streamgeoriënteerde verbinding. |
| ISC_REQ_USE_SESSION_KEY | Er moet worden onderhandeld over een nieuwe sessiesleutel . |
De aangevraagde kenmerken worden mogelijk niet ondersteund door de client. Zie de parameter pfContextAttr voor meer informatie.
Zie Contextvereisten voor meer beschrijvingen van de verschillende kenmerken.
Gereserveerd1[in]
Deze parameter is gereserveerd en moet worden ingesteld op nul.
TargetDataRep-[in]
De gegevensweergave, zoals bytevolgorde, op het doel. Deze parameter kan worden SECURITY_NATIVE_DREP of SECURITY_NETWORK_DREP.
[in, optional]
Een aanwijzer naar een SecBufferDesc-structuur die aanwijzers bevat naar de buffers die als invoer voor het pakket worden geleverd. Tenzij de clientcontext door de server is gestart, moet de waarde van deze parameter de eerste aanroep naar de functie hebben NULL . Bij volgende aanroepen naar de functie of wanneer de clientcontext door de server is gestart, is de waarde van deze parameter een aanwijzer naar een buffer die is toegewezen met voldoende geheugen om het token te bewaren dat door de externe computer wordt geretourneerd.
Gereserveerd2[in]
Deze parameter is gereserveerd en moet worden ingesteld op nul.
phNewContext-[in, out, optional]
Een aanwijzer naar een CtxtHandle structuur. Bij de eerste aanroep van InitializeSecurityContext (Kerberos) ontvangt deze aanwijzer de nieuwe contextnaam. In de tweede aanroep 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 aanwijzers bevat naar de SecBuffer-structuur die de uitvoergegevens ontvangt. Als een buffer is getypt als SEC_READWRITE in de invoer, wordt deze in de uitvoer weergegeven. Het systeem wijst een buffer toe voor het beveiligingstoken indien aangevraagd (via ISC_REQ_ALLOCATE_MEMORY) en vult het adres in de bufferdescriptor voor het beveiligingstoken in.
pfContextAttr-[out]
Een aanwijzer naar een variabele om een set bitvlaggen te ontvangen 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 ISC_RET, zoals ISC_RET_DELEGATE. Zie de parameter fContextReq voor een lijst met geldige waarden.
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.
Opmerking
Bepaalde contextkenmerken kunnen tijdens de onderhandeling met een externe peer worden gewijzigd.
ptsExpiry-[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. Omdat deze parameter optioneel is, NULL moet deze worden doorgegeven voor klanten met een korte levensduur.
Retourwaarde
Als de functie slaagt, retourneert de functie een van de volgende succescodes.
| Retourcode | Beschrijving |
|---|---|
| SEC_E_OK | De beveiligingscontext is geïnitialiseerd. Het is niet nodig om nog een InitializeSecurityContext (Kerberos) aan te roepen. Als de functie een uitvoertoken retourneert, dat wil zeggen, als de SECBUFFER_TOKEN in pOutput niet nul lang is, moet dat token naar de server worden verzonden. |
| SEC_I_COMPLETE_AND_CONTINUE | De client moet CompleteAuthToken aanroepen en vervolgens de uitvoer doorgeven aan de server. De client wacht vervolgens op een geretourneerd token en geeft dit in een andere aanroep door aan InitializeSecurityContext (Kerberos). |
| SEC_I_COMPLETE_NEEDED | De client moet het bouwen van het bericht voltooien en vervolgens de functie CompleteAuthToken aanroepen. |
| SEC_I_CONTINUE_NEEDED | De client moet het uitvoertoken naar de server verzenden en wachten op een retourtoken. Het geretourneerde token wordt vervolgens in een andere aanroep doorgegeven aan InitializeSecurityContext (Kerberos). Het uitvoertoken kan leeg zijn. |
| SEC_I_INCOMPLETE_CREDENTIALS | Gebruiken met Schannel. De server heeft clientverificatie aangevraagd en de opgegeven referenties bevatten geen certificaat of het certificaat is niet uitgegeven door een certificeringsinstantie (CA) die wordt vertrouwd door de server. Zie Opmerkingenvoor meer informatie. |
Als de functie mislukt, retourneert de functie een van de volgende foutcodes.
| Retourcode | Beschrijving |
|---|---|
| SEC_E_INSUFFICIENT_MEMORY | Er is onvoldoende geheugen beschikbaar om de aangevraagde actie te voltooien. |
| SEC_E_INTERNAL_ERROR | Er is een fout opgetreden die niet is toegewezen aan een SSPI-foutcode. |
| SEC_E_INVALID_HANDLE | De greep die aan de functie is doorgegeven, is ongeldig. |
| SEC_E_INVALID_TOKEN | De fout is te wijten aan een verkeerd ingedeeld invoertoken, zoals een token dat tijdens het transport is beschadigd, een token met een onjuiste grootte of een token dat is doorgegeven aan de verkeerde beperkte delegatie. Het doorgeven van een token aan het verkeerde pakket kan gebeuren als de client en server niet hebben onderhandeld over de juiste beperkte delegatie. |
| SEC_E_LOGON_DENIED | De aanmelding is mislukt. |
| SEC_E_NO_AUTHENTICATING_AUTHORITY | Er kan geen contact worden gemaakt met de instantie voor verificatie. De domeinnaam van de verifiërende partij kan onjuist zijn, het domein kan onbereikbaar zijn of er is mogelijk een vertrouwensrelatiefout opgetreden. |
| SEC_E_NO_CREDENTIALS | Er zijn geen referenties beschikbaar in de beperkte delegatie. |
| SEC_E_TARGET_UNKNOWN | Het doel is niet herkend. |
| SEC_E_UNSUPPORTED_FUNCTION | Er is een contextkenmerkvlag opgegeven die ongeldig is (ISC_REQ_DELEGATE of ISC_REQ_PROMPT_FOR_CREDS) in de parameter fContextReq . |
| SEC_E_WRONG_PRINCIPAL | De principal die de verificatieaanvraag heeft ontvangen, is niet hetzelfde als de principal die is doorgegeven aan de parameter pszTargetName . Dit duidt op een fout in wederzijdse verificatie. |
Opmerkingen
De aanroeper is verantwoordelijk voor het bepalen of de uiteindelijke contextkenmerken voldoende zijn. Als er bijvoorbeeld om vertrouwelijkheid is gevraagd, maar niet tot stand kon worden gebracht, kunnen sommige toepassingen ervoor kiezen om de verbinding onmiddellijk af te sluiten.
Als kenmerken van de beveiligingscontext niet voldoende zijn, moet de client de gedeeltelijk gemaakte context vrij maken door de functie DeleteSecurityContext aan te roepen.
De functie InitializeSecurityContext (Kerberos) wordt door een client gebruikt om een uitgaande context te initialiseren.
Voor een beveiligingscontext met twee been is de aanroepvolgorde als volgt:
- De client roept de functie aan met phContext ingesteld op
NULLen vult de bufferdescriptor in met het invoerbericht. - Het beveiligingspakket onderzoekt de parameters en bouwt een ondoorzichtig token, waarbij het in het TOKEN-element in de buffermatrix wordt geplaatst. Als de parameter fContextReq de vlag ISC_REQ_ALLOCATE_MEMORY bevat, wijst het beveiligingspakket het geheugen toe en wordt de aanwijzer in het TOKEN-element geretourneerd.
- De client verzendt het token dat is geretourneerd in de pOutput-buffer naar de doelserver. De server geeft het token vervolgens door als invoerargument in een aanroep naar de functie AcceptSecurityContext (Kerberos).
- AcceptSecurityContext (Kerberos) kan een token retourneren dat door de server naar de client wordt verzonden voor een tweede aanroep naar InitializeSecurityContext (Kerberos) als de eerste aanroep SEC_I_CONTINUE_NEEDED geretourneerd.
Voor beveiligingscontextenmet meerdere been, zoals wederzijdse verificatie, is de aanroepvolgorde als volgt:
- De client roept de functie aan zoals eerder beschreven, maar het pakket retourneert de SEC_I_CONTINUE_NEEDED succescode.
- De client verzendt het uitvoertoken naar de server en wacht op het antwoord van de server.
- Na ontvangst van het antwoord van de server roept de client InitializeSecurityContext (Kerberos) opnieuw aan, waarbij phContext is ingesteld op de handle die is geretourneerd van de laatste aanroep. Het token dat van de server is ontvangen, wordt geleverd in de parameter pInput .
- Gebruik de waarde phContext niet in gelijktijdige aanroepen naar InitializeSecurityContext (Kerberos). De implementatie in de beveiligingsproviders is niet thread-safe.
Als de server met succes heeft gereageerd, wordt het beveiligingspakket weer SEC_E_OK en wordt er een beveiligde sessie tot stand gebracht.
Als de functie een van de foutreacties retourneert, wordt het antwoord van de server niet geaccepteerd en wordt de sessie niet tot stand gebracht.
Als de functie SEC_I_CONTINUE_NEEDED, SEC_I_COMPLETE_NEEDED of SEC_I_COMPLETE_AND_CONTINUE retourneert, worden stap 2 en 3 herhaald.
Als u een beveiligingscontext wilt initialiseren, is mogelijk meer dan één aanroep naar deze functie vereist, afhankelijk van het onderliggende verificatiemechanisme en de keuzes die zijn opgegeven in de parameter fContextReq .
De parameters fContextReq en pfContextAttributes zijn bitmaskers die verschillende contextkenmerken vertegenwoordigen. Zie Contextvereistenvoor een beschrijving van de verschillende kenmerken. De parameter pfContextAttributes 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.
Als de vlag ISC_REQ_USE_SUPPLIED_CREDS is ingesteld, moet het beveiligingspakket zoeken naar een SECBUFFER_PKG_PARAMS buffertype in de invoerbuffer pInput . Dit is geen algemene oplossing, maar biedt waar nodig een sterke koppeling van beveiligingspakketten en toepassingen.
Als ISC_REQ_ALLOCATE_MEMORY is opgegeven, moet de aanroeper het geheugen vrij maken door de functie FreeContextBuffer aan te roepen.
Het invoertoken kan bijvoorbeeld de uitdaging zijn van een LAN Manager. In dit geval is het uitvoertoken de met NTLM versleutelde reactie op de uitdaging.
De actie die de client uitvoert, is afhankelijk van de retourcode van deze functie. Als de retourcode SEC_E_OK is, wordt er geen tweede Kerberos-aanroep (InitializeSecurityContext) weergegeven en wordt er geen reactie van de server verwacht. Als de retourcode SEC_I_CONTINUE_NEEDED is, verwacht de client een token als reactie van de server en geeft deze in een tweede aanroep door aan InitializeSecurityContext (Kerberos). De SEC_I_COMPLETE_NEEDED retourcode geeft aan dat de client het bericht moet voltooien en de functie CompleteAuthToken moet aanroepen. De SEC_I_COMPLETE_AND_CONTINUE code bevat beide acties.
Als InitializeSecurityContext (Kerberos) slaagt bij de eerste (of enige) aanroep, moet de aanroeper uiteindelijk de functie DeleteSecurityContext aanroepen op de geretourneerde handle, zelfs als de aanroep mislukt op een later deel van de verificatie-uitwisseling.
De client kan InitializeSecurityContext (Kerberos) opnieuw aanroepen nadat deze is voltooid. Dit geeft aan het beveiligingspakket aan dat een herauthenticatie is gewenst.
Bellers in de kernelmodus hebben de volgende verschillen: de doelnaam is een Unicode-tekenreeks die moet worden toegewezen in het virtuele geheugen met behulp van VirtualAlloc; deze mag niet worden toegewezen vanuit de pool. Buffers die zijn doorgegeven en geleverd in pInput en pOutput , moeten zich in het virtuele geheugen bevinden, niet in de pool.
Behoeften
| 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 |
Zie ook
AcceptSecurityContext (Kerberos)